比方說,我有這個存儲過程在它的身上:T-SQL EXEC和範圍
EXEC 'INSERT INTO ' + quotename(@table) ' blah...'
SELECT IDENT_CURRENT('' + @table + '')
是IDENT_CURRENT()保證取得該行的EXEC插入的身份? IDENT_CURRENT()「返回爲任何會話和任何作用域中的特定表生成的最後一個標識值」,但是EXEC中的作用域與存儲過程不同,對嗎?
我想確保如果一次調用多個存儲過程,則會選擇正確的標識。
編輯:或者,我需要做的這兩個INSERT和EXEC內選擇,就像這樣:
declare @insert nvarchar
set @insert =
'INSERT INTO ' + quotename(@table) ' blah...' +
'SELECT IDENT_CURRENT(''' + @table + ''')'
EXEC @insert
如果是這樣的話,我該如何選擇了EXEC的結果,如果我想在T-SQL中繼續使用更多的代碼?這樣的(儘管這顯然是不正確):
declare @insert nvarchar
set @insert =
'INSERT INTO ' + quotename(@table) ' blah...' +
'SELECT IDENT_CURRENT(''' + @table + ''')'
declare @ident int
set @ident = EXEC @insert
-- more code
SELECT * FROM blah
UPDATE:在第一個片段,如果我選擇SCOPE_IDENTITY()而不是使用IDENT_CURRENT(),NULL由SELECT返回。 :(
強烈建議您使用第二個。 @@身份幾乎從不使用,因爲它通常不會給出正確的結果。 用於識別需要位於exec語句中的範圍標識的榮譽。 – HLGEM 2009-04-08 21:23:44