2013-07-26 201 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