关于带有CASE语句的SQL UPDATE的问题

时间:2010-07-09 12:54:21

标签: sql sql-server

所以我需要更新这个SQL表。现在我们使用一个工具来完成这个过程,所以如果我们只是重命名该列,那么它就行不通,因为我们的工具只会丢弃旧列并添加一个带有新名称的新列,所以我们必须手动完成并输入将此代码放入构建中并从构建中排除表。

我们当前拥有的表格中有一个名为“FeeTypeId”的列。我们有另一个表,一个Lookup表,它有一堆与类型和描述相关的ID。我们想要我刚才提到的另一个表上的前一个'FeeTypeId'字段,以包含与其特定'FeeDescription'相关的LookupId。我将有一个包含映射的Excel工作表,所以现在没有真正的数据,只有逻辑。

这是我写的脚本,但我不知道它是否会运行。你能帮助我吗?

----------------------------------------------------------------------
--PRE_UPGRADE--
----------------------------------------------------------------------

CREATE TABLE dbo.TmpFeesToRules(OldValue varchar, NewValue varchar)
--populate with values from Excel

----------------------------------------------------------------------
--POST UPGRADE--
----------------------------------------------------------------------

UPDATE Lending.ApplicationFee
    SET FeeTypeId = 
        CASE t.NewValue 
            WHEN <> null THEN (SELECT LookupID FROM tblLookup WHERE LookupType = 'FEE_CODE' AND LookupDesc = t.NewValue)
            ELSE (SELECT LookupID FROM tblLookup WHERE LookupType = 'FEE_CODE' AND LookupCode = 'OTHER') END
            -- else might change, might not even need an else

    FROM TmpFeesToRules t INNER JOIN tblLookup l ON t.NewValue = l.LookupDesc

    -- Drop the tmp table
    DROP TABLE dbo.TmpFeesToRules

1 个答案:

答案 0 :(得分:1)

我无法真正测试这个,但根据Toad,以下是有效的SQL。也许你可以尝试运行这个:

UPDATE Lending.ApplicationFee
SET FeeTypeId = 
(
    CASE WHEN t.NewValue  IS NOT NULL THEN 
        (SELECT LookupID FROM tblLookup WHERE LookupType = 'FEE_CODE' AND LookupDesc = t.NewValue)
    ELSE 
        (SELECT LookupID FROM tblLookup WHERE LookupType = 'FEE_CODE' AND LookupCode = 'OTHER')
    END
)
FROM TmpFeesToRules t 
INNER JOIN tblLookup l ON t.NewValue = l.LookupDesc