2013年5月20日

TSQL 回傳辨識(Identiy)值

我們Master-detail的資料表關係,如果 Master用Identitity當作資料表的主鍵,detail的主鍵會包含Master的主鍵+序號,就必需要可以抓到主鍵的Identity

Sqlserver有提供三個抓Identiy變數(MSDN),有兩個名詞要說明一下
Connection: Client連接到DB Server的連線,或稱Session
Scope:我們的一連串insert table指令,這稱同一Scope裡,如果Insert會觸發Trigger或Replication,進行隱藏table 的insert,這裡稱為另一 Scipe
以下是這三個變數說明如下:
@@IDENTITY
1.回傳在一個connection裡產生最後的IDENTITY 值,
2.回傳值不只是指令所下的insert table的Identitiy值,也可能是不同Scope所產生的值,像是Triger Replication所產生的Identity,抓的原則以最後產生的值為準,
SCOPE_IDENTITY()
1.回傳在一個connection裡產生最後的IDENTITY 值,
2.跟上面部一樣是只抓Scope內的insert table的Identitiy值,像是Triger Replication所產生的Identity就不會抓,抓的原則以最後產生的值為準,
IDENT_CURRENT(‘’table name’ ) – MSDN
1. 回傳所有Connection該Table產生最後的IDENTITY 值
2. 不管Connection或Scope, 只管Table name
結論是,以我們開頭的需求是要用SCOPE_IDENTITY()
如果是多筆的新增,則考慮使用Output
On the OUTPUT of a data modification

沒有留言:

張貼留言