uniqueidentifier型別的表,且當新增一筆資料後須將新建資料的主鍵傳回。由於主鍵不再是
IDENTITY型態的數值,無法使用
SELECT SCOPE_IDENTITY() AS NewID方式取得,因此直覺改法就是在執行
INSERT指令前先透過
NEWID()產生 GUID,最後再將該筆 GUID 字串
SELECT回去。
爬了一些網路上的教學後發現:若要將 GUID 作為主鍵,建議使用
NEWSEQUENTIALID()取代
NEWID()。不過替換過程是有代價。由於
NEWSEQUENTIALID()只能使用在
DEFAULT運算式,無法在預存程序程式碼中產生並指派到參數內,因此若新增資料後要回傳自動透過
NEWSEQUENTIALID()產生的 GUID 值,需用點小技巧。此時,
INSERTED指令就派上用場了。
--Table: NewSeqIdDemo
ID FirstName LastName
------------------------------------- ----------- -----------
35881e9e-99b8-eb11-80d7-00155d321b03 Felix Huang
e950efba-99b8-eb11-80d7-00155d321b03 Lanny Huang
上表中,若執行
INSERT指令後想取得剛才新增該筆紀錄的特定欄位,可以在
VALUES的指令前加入
OUTPUT INSERTED.<欄位名稱>,如:
INSERT INTO NewSeqIdDemo (FirstName, LastName)
OUTPUT INSERTED.FirstName, INSERTED.LastName
VALUES ('Vincent', 'Huang')這指令很方便,任何欄位值都可以回傳,不過可惜的是無法一一將各欄位取出的值塞進已宣告的參數內。若現在想將 ID 塞進某個已宣告的參數內,方法很簡單,只需要將取出來的欄位值塞進一個資料表內,再透過
SELECT指令,就可以輕鬆取得並賦值到指定的參數了。
DECLARE @ID AS UNIQUEIDENTIFIER
--宣告一個承接 INSERTED 取出值的臨時資料表
DECLARE @table TABLE (ID UNIQUEIDENTIFIER)
INSERT INTO NewSeqIdDemo (FirstName, LastName)
OUTPUT INSERTED.ID INTO @table
VALUES ('Vincent', 'Huang')
SELECT @ID = ID FROM @table
參考來源:
沒有留言 :
張貼留言
注意:只有此網誌的成員可以留言。