从参数名称中检索参数值作为SQL中的字符串

时间:2012-07-25 20:15:10

标签: sql sql-server

我正在尝试使用一些动态的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”。

有没有人知道从参数的字符串名称到实际值的方法?我试图避免硬编码所有的值,我尝试过的任何工作都失败了,并且给我的错误看起来比我上面说的要糟糕得多。

1 个答案:

答案 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;