2013-07-30 55 views
-4

我不明白@@ Identity。這到底做了什麼?我有自己的標識規範設置爲Yes和身份增量設置爲1。我從數據庫程序員審查代碼,我發現下面的表格:SQL Server @@ Identity

DECLARE @CustomerID int, 
    INSERT INTO Customers 
    (Name, Login, Password, IsActive,) 
    VALUES('University', NULL, NULL, 1,) 
    SET @CustomerID = @@IDENTITY 

但在插入後其他地方,她沒有包括@@IDENTITY 。例如: 在同一代碼她:

INSERT INTO Meters 
(Name, Type, SiteID, CustomerAccountID) 
SELECT Sites.Name + ' ' + Type, ID, ID, NULL 
FROM Sites 
CROSS JOIN MeterTypes 
WHERE ProjectID = @ProjectID 
AND tblMEP_MeterTypes.ID IN(1, 3, 13) 

任何人能告訴我什麼時候使用@@IDENTITY?我認爲它應該在每個插入語句的末尾。順便說一句,上表(客戶)有一個名爲ID的列,它是一個主鍵字段,不能爲空!這有效嗎?它不應該是這樣:

DECLARE @CustomerID int, 
    INSERT INTO Customers 
    (ID, Name, Login, Password, IsActive,) 
    VALUES(1, 'University', NULL, NULL, 1,) 
    SET @CustomerID = @@IDENTITY 
+0

這不是我的問題!我閱讀了這篇文章,並在網上看了一下,但我沒有得到任何答案。 –

+0

爲什麼我們使用他們的地方,我們不在其他地方?我很抱歉,我知道這很煩人,但我發誓如果我知道我不會問。 –

+2

假裝你從未聽說過@@ IDENTITY。當你需要時你應該使用SCOPE_IDENTITY。而你正在向後學習恕我直言 - 你不應該問「哦,這個函數名稱是什麼,我可以在什麼地方使用它?」你應該問「好吧,我有這種情況,我需要獲得表中生成的最後一個身份值,我應該使用哪個函數?」 –

回答

2

可能是因爲在代碼的第二塊她不在乎產生什麼IDENTITY值。也許在第一個代碼示例中,它被用於返回到客戶端或之後插入到相關的表中。

忘記@@ IDENTITY。 SCOPE_IDENTITY()更安全,OUTPUT子句也可以用。