1

我正在尝试使用一些动态 sql。我已经生成了 100 多个参数,为了加快速度,我尝试使用动态 sql 仅将值插入到我必须基于从其他表中检索到的信息的表中。我尝试了很多事情,比如添加演员等。

我的意思的例子:

DECLARE @var1 NVARCHAR(MAX)

-- Loop through and add various values
SET @var1 = @var1 + @parameterName
-- The parameter name is retrieved from a table that holds this information

问题是,当我将类似于“@myFirstParameter”的参数名称添加到我的最终表达式中时,如下所示:

DECLARE @finalString NVARCHAR(MAX)
SET @finalString = 'INSERT INTO myTableName ([myFirstParameter]) VALUES (@myFirstParameter)'
EXEC(@finalString)

“@myFirstParameter”没有被它的值替换,我收到以下错误:必须声明标量变量“@myFirstParameter”。

有谁知道从参数的字符串名称到实际值的方法?我试图避免对所有值进行硬编码,并且我尝试的任何解决方法都失败了,并且给我的错误似乎比我上面所说的要糟糕得多。

4

1 回答 1

1

第一种方法是将参数的值而不是其名称添加到 SQL 字符串中:

SET @finalString = 'INSERT INTO myTableName ([myFirstParameter]) VALUES (' + 
    @myFirstParameter + ')'

这假定参数具有字符串值。如果没有,您必须投射它,例如cast(@myFirstParameter as varchar(128)).

第二种方法是使用sp_executesql代替exec

exec sp_executesql 
    N'INSERT INTO myTableName ([myFirstParameter]) VALUES (@myFirstParameter)',
    N'@myFirstParameter varchar(128)',
    @myFirstParameter = @myFirstParameter;
于 2012-07-25T20:22:37.747 回答