我想将我的查询结果更新到现有的表中,因为您可以看到它是一个动态查询,我不知道如何在此代码中插入更新函数。当我将其插入,而功能发送查询执行成功但没有任何更新..如何使用动态查询的返回值更新当前表中的值?
我用于动态查询验证码:
Declare @SQL AS VARCHAR(MAX)
DECLARE @TABLENAME AS VARCHAR(max);
DECLARE @COLUMN1 AS VARCHAR(max);
DECLARE @COUNTER INT;
SET @TABLENAME = 'MOMENTUM_Results';
SET @COUNTER = 2;
WHILE @COUNTER<=122
BEGIN
SELECT @COLUMN1 = C.Name
FROM sys.Columns C
WHERE OBJECT_NAME(C.object_id) = @TABLENAME
AND C.column_id = @COUNTER
;
SET @SQL = 'SELECT AVG(MR.[' + @COLUMN1 + ']) From MOMENTUM_Quintile MQ
Left Join MOMENTUM_Returns MR on MQ.Mnemonic = MR.Mnemonic WHERE MQ.[' + @COLUMN1 + '] = 5'
EXECUTE (@SQL)
SET @COUNTER = @COUNTER + 1;
END
要获得这些结果:
,现在我想通过使用此代码更新当前表:
UPDATE MOMENTUM_Results
SET @COLUMN1 = @SQL
WHERE [MNEMONIC]='RANK_5';
的问题是,我不知道在哪里把它放在第一代码..或如何正确地使用它..并且终于在这里是现有的表(最终结果的最终格式我想获得,我在其中要插入的行RANK_5查询结果)
人如果有任何线索?
打印结果:
DECLARE @avg as float;
SELECT @avg = AVG(MR.[2006-12-30]) From MOMENTUM_Quintile MQ
Left Join MOMENTUM_Returns MR on MQ.Mnemonic = MR.Mnemonic WHERE MQ.[2006-12-30] = 5;
UPDATE MOMENTUM_Results_new SET @COLUMN1 = @avg
WHERE [MNEMONIC]=RANK_5
执行结果:
Msg 137, Level 15, State 1, Line 6
Must declare the scalar variable "@COLUMN1".
Msg 137, Level 15, State 1, Line 6
Must declare the scalar variable "@COLUMN1".
Msg 137, Level 15, State 1, Line 6
Must declare the scalar variable "@COLUMN1".
Msg 137, Level 15, State 1, Line 6
Must declare the scalar variable "@COLUMN1".
Msg 137, Level 15, State 1, Line 6
Must declare the scalar variable "@COLUMN1".
这很奇怪bc我声明了变量@avg,我得到这个错误信息:“必须声明标量变量”@avg“” –
@Robin_Hcp我很困惑,因为答案被接受了。你是否在动态查询中声明了变量?因为如果你以普通代码的形式在外面执行它,查询无法检测到它,因为查询在不同的会话中执行 – jambonick
我明白了!但它并没有更新表格,表格一直在行中显示NULL值RANK_5 –