Sql server 更新不使用案例…当…其他时
这看起来应该很容易,当我做一个简单的选择时,一切都很好,但是当我尝试运行更新时,我得到一个错误,它说“不正确的语法接近大小写”Sql server 更新不使用案例…当…其他时,sql-server,tsql,Sql Server,Tsql,这看起来应该很容易,当我做一个简单的选择时,一切都很好,但是当我尝试运行更新时,我得到一个错误,它说“不正确的语法接近大小写” Update TBL_FBNK_CURRENCY_HIST SET CURRENCY_FBNK = CURRENCY.Currency_Code, CURRENCY_ASOFDATE = CURRENCY.ASOFDATE, CURRENCY_MID_REVAL_RATE = CURRENCY.MID_REVA
Update TBL_FBNK_CURRENCY_HIST
SET CURRENCY_FBNK = CURRENCY.Currency_Code,
CURRENCY_ASOFDATE = CURRENCY.ASOFDATE,
CURRENCY_MID_REVAL_RATE = CURRENCY.MID_REVAL_RATE,
ORIGINAL_AMOUNT = MM_HIST.PRINCIPAL
REPORTABLE_AMOUNT = REVAL_BALANCE
CASE WHEN CURRENCY.ID IN('AUD','EUR','GBP','NZD','XAG','XAU','XPD','XPT')
THEN (MM_HIST.PRINCIPAL * CURRENCY.Mid_Reval_Rate)
ELSE (MM_HIST.PRINCIPAL / CURRENCY.Mid_Reval_Rate) END AS REVAL_BALANCE
From TBL_FBNK_CURRENCY_HIST AS CURRENCY INNER JOIN JOIN TBL_MULTI_MM_HIST AS MM_HIST
ON CURRENCY.Currency_Code = MM_HIST.Currency
AND CURRENCY.ASOFDATE = MM_HIST.ASOFDATE
这里到底出了什么问题?您在
MM\u HIST.PRINCIPAL
和可报告金额
之间遗漏了一个昏迷,在REVAL\u BALANCE
和CASE
之间遗漏了另一个昏迷。另外,您只使用CASE
语句返回一个值,但没有将其赋值给任何对象
假设按字段名将案例的结果分配给可报告金额
Update TBL_FBNK_CURRENCY_HIST
SET CURRENCY_FBNK = CURRENCY.Currency_Code,
CURRENCY_ASOFDATE = CURRENCY.ASOFDATE,
CURRENCY_MID_REVAL_RATE = CURRENCY.MID_REVAL_RATE,
ORIGINAL_AMOUNT = MM_HIST.PRINCIPAL,
REPORTABLE_AMOUNT = CASE WHEN CURRENCY.ID IN('AUD','EUR','GBP','NZD','XAG','XAU','XPD','XPT')
THEN (MM_HIST.PRINCIPAL * CURRENCY.Mid_Reval_Rate)
ELSE (MM_HIST.PRINCIPAL / CURRENCY.Mid_Reval_Rate) END
From TBL_FBNK_CURRENCY_HIST AS CURRENCY INNER JOIN JOIN TBL_MULTI_MM_HIST AS MM_HIST
ON CURRENCY.Currency_Code = MM_HIST.Currency
AND CURRENCY.ASOFDATE = MM_HIST.ASOFDATE
整个CASE…END
构成一个表达式。您的错误是将别名REVAL_BALANCE指定给CASE表达式的结果,这在select中有意义,但在更新中没有意义
为更新使用分配,如下所示:
REPORTABLE_AMOUNT = CASE WHEN CURRENCY.ID IN('AUD','EUR','GBP','NZD','XAG','XAU','XPD','XPT')
THEN (MM_HIST.PRINCIPAL * CURRENCY.Mid_Reval_Rate)
ELSE (MM_HIST.PRINCIPAL / CURRENCY.Mid_Reval_Rate) END
或者您是否需要将REVAL_BALANCE
与货币兑换率相乘?在本例中,您只是忘记键入乘法运算符(*)。这可以是:
UPDATE TBL_FBNK_CURRENCY_HIST SET
CURRENCY_FBNK = CURRENCY.Currency_Code,
CURRENCY_ASOFDATE = CURRENCY.ASOFDATE,
CURRENCY_MID_REVAL_RATE = CURRENCY.MID_REVAL_RATE,
ORIGINAL_AMOUNT = MM_HIST.PRINCIPAL,
REPORTABLE_AMOUNT = REVAL_BALANCE * CASE WHEN
CURRENCY.ID IN('AUD','EUR','GBP','NZD','XAG','XAU','XPD','XPT')
THEN (MM_HIST.PRINCIPAL * CURRENCY.Mid_Reval_Rate)
ELSE (MM_HIST.PRINCIPAL / CURRENCY.Mid_Reval_Rate) END
From TBL_FBNK_CURRENCY_HIST AS CURRENCY
INNER JOIN JOIN TBL_MULTI_MM_HIST AS MM_HIST ON CURRENCY.Currency_Code = MM_HIST.Currency AND CURRENCY.ASOFDATE = MM_HIST.ASOFDATE
案例的结果更新了哪些内容?您似乎在MM\u HIST.PRINCIPAL
(1)您是否厌倦了添加逗号(2)您试图将大小写表达式的结果分配给什么?在MM\u HIST.PRINCIPAL
之后也缺少逗号!!就这样,乔希!谢谢现在该回家休息了。我想在办公室呆太久会让人一时哑口无言。我很好奇什么样的商业规则需要除法而不是乘法,这取决于货币?对于某些货币,换算系数是相互存储的吗?我问了同样的问题!基本上,当涉及外汇时,你应该用汇率乘以一切,或者用汇率除以一切。在我的s***a**公司,他们有自己的(非标准化)做事方式。