"Must declare variable",但是当我声明它时,"variable already declared"

"Must declare variable", but when I declare it, "variable already declared"

我正在生成插入 SQL,其中 returns 是调用方的主键。 SQL 是为任意 table 生成的,所以我不能使用 SCOPE_IDENTITY(),因为并非每个 table 都使用身份。 当我执行查询时,MS SQL 抱怨输出变量未声明,但在我声明时说它已经声明。该死的如果我这样做,如果我不这样做该死。

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.

我该怎么做?

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

DECLARE @d TABLE
(
    id INT
);

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