"必须声明变量",但是当我声明它时,"变量已经声明"

时间:2015-09-30 01:49:12

标签: c# sql-server ado.net dapper

我生成插入SQL,它将主键返回给调用者。 SQL是为任意表生成的,因此我无法使用SCOPE_IDENTITY(),因为并非每个表都使用标识。 当我执行我的查询时,MS SQL会抱怨输出var没有声明,但是当我声明它时它已经声明了。如果我这样做该死的,如果我不这该死的话。该死的。

var parameters = new DynamicParameters();
parameters.Add("d", direction:ParameterDirection.Output, size:8000);
// (Add the input params a, b, c)
remoteConnection.Execute(sql, parameters);

SQL:

-- Error: Must declare the table variable "@d"
INSERT INTO Blacklist
(DatabaseConnectionId,TableSchema,TableName)
OUTPUT INSERTED.Id INTO @d
VALUES (@a,@b,@c)

我宣布变量:

DECLARE @d int
INSERT INTO Blacklist
(DatabaseConnectionId,TableSchema,TableName)
OUTPUT INSERTED.Id INTO @d
VALUES (@a,@b,@c)
-- Error: The variable name '@d' has already been declared. Variable names must be unique within a query batch or stored procedure.

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您需要将@d声明为TABLE变量:

DECLARE @d TABLE
(
    id INT
);

INSERT INTO Blacklist
(DatabaseConnectionId,TableSchema,TableName)
OUTPUT INSERTED.Id INTO @d
VALUES (@a,@b,@c)