我正在尝试使用一些动态的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”。
有没有人知道从参数的字符串名称到实际值的方法?我试图避免硬编码所有的值,我尝试过的任何工作都失败了,并且给我的错误看起来比我上面说的要糟糕得多。
答案 0 :(得分: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;