我创建了一个时间表:
create table #T_Table(id int,name nvarchar(80),value float);
我正在执行动态SQL以#T_Table
向@table_name
插入选择结果,如下所示:
SET @template = 'INSERT #T_Table (id,name,value) VALUES('+Cast(@counterI as nvarchar)+', '+ @fieldFromTableName +', Select [value] = SUM('+@fieldFromTableName+') FROM '+ @table_name +')';
EXEC (@template);
所以,如果我打印@template
:
INSERT #T_Table(id,name,value) VALUES(1, x1, Select [value] = SUM(x1) FROM Mytable);
有什么不对?
答案 0 :(得分:1)
您无法在SELECT
个值集中嵌套VALUES
。
将VALUES
更改为SELECT
并删除括号。您还需要确保x1
包含在引号中,例如:
INSERT #T_Table(id,name,value)
SELECT 1, 'x1', Select [value] = SUM(x1) FROM Mytable;
要获得x1
周围的引号,您必须在引用的字符串中放置双引号以逃避它们:例如SET @quotedString = 'not quoted, ''quoted,'' not quoted'
答案 1 :(得分:1)
这是您应该构建的INSERT:
INSERT #T_Table(id,name,value)
SELECT 1, 'x1', SUM(x1) FROM Mytable