我正在尝试将数据动态插入临时表中,就像将数据作为变量一样传递>
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。
有什么建议可以克服这个问题吗?
答案 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中所做的注释。
害怕,我不知道您的第二句话是什么意思。您需要进一步解释。