SQL错误:必须声明标量变量

时间:2013-07-26 16:51:35

标签: c# sql sql-server

我正在尝试为最后一次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来插入当前事务的数据。因此建立所有表和单个事务之间的关系。

然而我收到错误:

  

必须为@RowId

声明一个标量变量

我相信RowId之间的逻辑链接和SQL表中的含义之间的逻辑关联是否已被破坏...任何人都可以帮我解决这个问题吗?

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

更新:我无法获取代码以将RowID值存储在变量中。我试过了:

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

但是我得到一个空的异常错误:

  

对象引用未设置为对象的实例

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

  

“必须为@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);

答案 1 :(得分: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是和整数字段,否则相应地设置类型