Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 更新不使用案例…当…其他时_Sql Server_Tsql - Fatal编程技术网

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**公司,他们有自己的(非标准化)做事方式。