CREATE PROCEDURE my_pro
@inputDate VARCHAR(20), -- 輸入參數
@Result VARCHAR(255) OUTPUT -- 輸出參數
AS
BEGIN
DECLARE @variable1 VARCHAR(255);
DECLARE @variable2 INT;
IF ... BEGIN ... END
ELSE BEGIN ... END
END;
GO
DROP PROCEDURE my_pro;
-- 1. 無參數
EXEC my_pro;
-- 2. 僅輸入參數
EXEC my_pro '2023-01-01';
-- 3. 有輸出參數
DECLARE @Result VARCHAR(1024);
EXEC my_pro '2023-01-01', @Result OUTPUT;
SELECT @Result AS Result;
需求:Test 表中 Test01 > 10000 的列,將 Test02 以逗號合併回傳。
CREATE PROCEDURE my_Cursor
@id INT,
@Result VARCHAR(255) OUTPUT
AS
BEGIN
DECLARE city_cursor CURSOR FOR
SELECT Test01 FROM Test WHERE Test01 > @id;
SET @Result = '';
DECLARE @Field INT;
OPEN city_cursor;
FETCH NEXT FROM city_cursor INTO @Field;
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Result = ''
SELECT @Result = Test02 FROM Test WHERE Test01 = @Field;
ELSE
SELECT @Result = @Result + ',' + Test02 FROM Test WHERE Test01 = @Field;
FETCH NEXT FROM city_cursor INTO @Field;
END
CLOSE city_cursor;
DEALLOCATE city_cursor;
END;
GO
-- 執行
DECLARE @Result VARCHAR(1024);
EXEC my_Cursor 10000, @Result OUTPUT;
SELECT @Result AS Result;
| 函數 | 範圍 | 觸發器影響 |
|---|---|---|
@@IDENTITY | Session 所有 Scope | 受影響 |
SCOPE_IDENTITY() | 目前 Scope | 不受影響 |
IDENT_CURRENT('tbl') | 指定表所有 Session | 不受 Scope 限制 |
SELECT IDENT_CURRENT('TableName'); -- 目前身分值
SELECT IDENT_INCR('TableName'); -- 增量
SELECT IDENT_SEED('TableName'); -- 種子
SELECT IDENT_CURRENT('TableName') + IDENT_INCR('TableName'); -- 下一個值
LAST_INSERT_ID()RETURNING id INTO :v / SequenceINSERT ... RETURNING idSCOPE_IDENTITY() 取得新增 ID。OUTPUT 關鍵字,否預設為輸入。usp_) 區分系統物件。