2013-07-26 224 views
-2

我試圖獲得最後的SQL插入的獨特的自動生成密鑰: -SQL錯誤:必須聲明標量變量

INSERT [db].[xyyz] (x,y,z) values (@x,@y,@z) 
SET @RowId = SCOPE_IDENTITY(); 
command.Parameters.AddWithValue("@x", x); 
command.Parameters.AddWithValue("@y", y); 
command.Parameters.AddWithValue("@z", z); 

這樣一來,我可以訪問其他表並使用相同的RowId的,爲當前事務插入數據。並因此建立所有表與單個事務之間的關係。

但是我得到的錯誤:

Must declare a scalar variable" for the @RowId

我相信介於什麼ROWID是什麼意思在SQL表壞了邏輯鏈路...誰能幫助我解決這個問題?

我在C#中工作,而不是在SQL Server中工作。

UPDATE:我無法讓我的代碼將RowID值存儲在變量中。我曾嘗試:

Int32 newRowID = 0; 
... SQL QUERY.. 
... 
newRowID = (Int32)command.ExecuteScalar(); 

,但我得到一個空的異常錯誤:

Object reference not set to an instance of an object

誰能幫助我解決這個問題?

+2

它告訴你是什麼錯誤;你需要*聲明*'@ RowId',除非你已經宣佈它是elswehere並且沒有顯示它。 – LittleBobbyTables

+0

,我該怎麼做?我以前的版本爲 int RowId = 0; – Philo

+0

,因爲我在C#和asp.net工作...是不是很糟糕? – Philo

回答

3

"Must declare a scalar variable" for the @RowId.

簡單地聲明它:

declare @RowID int; 
INSERT [db].[xyyz] (x,y,z) values (@x,@y,@z) 
SET @RowId = SCOPE_IDENTITY(); 
command.Parameters.AddWithValue("@x", x); 
command.Parameters.AddWithValue("@y", y); 
command.Parameters.AddWithValue("@z", z); 
+0

這不是必須的,因爲你已經在sql中聲明瞭標量變量。 –

+0

謝謝,我試圖訪問的價值,但還沒有成功.. – Philo

+0

就像我想要一個變量'rowID',將存儲由@RowId檢索的值。 – Philo

2

確保在嘗試設置它之前在腳本中包含此項。

DECLARE @RowID INT

所以你的腳本是;

DECLARE @RowID INT; 
INSERT [db].[xyyz] (x,y,z) values (@x,@y,@z) 
SET @RowId = SCOPE_IDENTITY(); 
command.Parameters.AddWithValue("@x", x); 
command.Parameters.AddWithValue("@y", y); 
command.Parameters.AddWithValue("@z", z); 

這是假設你的ID和整型字段,否則將類型設置相應

+0

謝謝克里斯。 ID實際上是一個整數字段。 – Philo