将变量动态地插入临时表中

时间:2019-02-21 18:23:55

标签: sql-server

我正在尝试将数据动态插入临时表中,就像将数据作为变量一样传递

DECLARE @data NVARCHAR(MAX)
SET @data = 'INSERT INTO #coco  ' + '([' + @val + '])' + ' SELECT [USER_ID] FROM [dbo].[Sheet1$] WHERE [Standard_Name] LIKE ' + @val

EXEC sp_executesql @data

@val是从表Sheet1$中选择的列名,并且很少有列名之间有空格。执行时,出现错误,例如列名“ Acrobat Reader”:

  

“ Acrobat”附近的语法不正确。

如果我在一列中使用硬编码逐一添加数据,则将数据添加到一列,而另一列则将其添加NULL。

有什么建议可以克服这个问题吗?

1 个答案:

答案 0 :(得分:0)

对您的SQL进行参数设置,此问题“消失”:

DECLARE @data;
SET @data = N'INSERT INTO #Coco (' QUOTENAME(@val) + N')' + NCHAR(10) + 
            N'SELECT [USER_ID]' + NCHAR(10) + 
            N'FROM dbo.[Sheet1$]' + NCHAR(10) + 
            N'WHERE [Standard_Name] = @val;'; --As this doesn't contain a %, there's no need for LIKE
EXEC sp_executesql @data,
                   N'@val = sysname', --guessed datatype
                   @val = @val;

请注意我在SQL中所做的注释。

害怕,我不知道您的第二句话是什么意思。您需要进一步解释。