我想在引用动态列时更新字段。 我们的目标是使流程自动化,因为该列每月都会引用更改。
例如,就像有不同的列,如month1,month2,month3到month24。每个月,只需要更新一列,但这是在另一个表中计算的运行编号。
所以我的问题是如何使查询动态化,以便每个月我只更新我想要的列号,而不更新另一个。
我尝试了以下脚本,但出现以下问题
将数据类型varchar转换为float时出错。
DECLARE @PromoMonthNumber VARCHAR(60)
DECLARE @PromoMonth VARCHAR(600)
SET @PromoMonthNumber = (SELECT CurrentDemandIndex FROM RidgeSys) --This refer to a number that change all the time
SET @PromoMonth = 'SELECT ABC.PromotionHistory' + @PromoMonthNumber
UPDATE ABC
SET @PromoMonth = table2.promotionhistory
FROM ABC
INNER JOIN (
SELECT Article.code as code, sum(ROUND(@PromoMonth,0)) as promotionhistory
FROM Article
INNER JOIN ABC ON DEF.articlecode = ABC.Articlecode
) as table2
ON ABC.articlecode = table2.code)
答案 0 :(得分:1)
这是您的问题:
SELECT Article.code as code, sum(ROUND(@PromoMonth,0)) as promotionhistory
由于@PromoMonth
被定义为VARCHAR
,因此,如果该值是非数字值,它将失败。这是一个示例:
这很好:
declare @x varchar(100) = '1';
select sum(round(@x,0));
结果:
1
此操作失败,并出现以上相同错误:
declare @x varchar(100) = 'x';
select sum(round(@x,0));
结果:
Msg 8114, Level 16, State 5, Line 3
Error converting data type varchar to float.
在进行计算之前,您需要检查该值是否为数字。