2

我有一个按 12 个周期列列出值的数据表。我试图在月初将前几个月的数据归零,但没有成功。我的查询的第一部分返回列名,然后我想将它传递到 Update 语句中,但这就是一切都出错的地方?请帮忙。*

DECLARE @A VARCHAR(20) = (SELECT listofperiod FROM [periods] P 
                          INNER JOIN (SELECT monthofyear 
                          FROM  ref_calender RC 
                          WHERE RC.date = Dateadd(m,-1,CONVERT(DATE,Getdate())))
                          RC ON P.monthofyear = RC.monthofyear) 

UPDATE FD SET  @A = 0 
       FROM   [test_table] FD 
       INNER JOIN [glx]AG ON FD.company = AG.company 
       AND FD.acctnum = AG.account_id  '
4

2 回答 2

4

您必须使用动态 sql 来实现这一点:

DECLARE @sql NVARCHAR(MAX)

SET @sql = 'UPDATE FD 
            SET ' + @A + '= 0 
            FROM   [test_table] FD 
           INNER JOIN [accpac_glx]AG 
                   ON FD.company = AG.company 
                      AND FD.acctnum = AG.account_id'

EXEC (@sql)
于 2013-07-19T10:51:40.683 回答
3

您可以使用多个条件set语句来做到这一点:

UPDATE FD 
SET    Period1 = (case when @A = 'Period1' then 0 else Period1 end),
       Period2 = (case when @A = 'Period2' then 0 else Period2 end),
       Period3 = (case when @A = 'Period3' then 0 else Period3 end),
       Period4 = (case when @A = 'Period4' then 0 else Period4 end)
FROM   [test_table] FD 
       INNER JOIN [glx]AG 
               ON FD.company = AG.company 
                  AND FD.acctnum = AG.account_id

也就是说,将值设置为当前值,除非标志 ( @A) 表示将值重置为 0。

于 2013-07-19T10:59:05.820 回答