Sql server 使用SET命令IF/ELSE更新表格

Sql server 使用SET命令IF/ELSE更新表格,sql-server,if-statement,case,Sql Server,If Statement,Case,我正在尝试更新一个表,我想根据股票价值运行2个不同的集合senarios 执行一个senario的工作代码 UPDATE dbo.ar SET webPublish = '0', ArtProdKlass = '9999', VaruGruppKod = '9999', ItemStatusCode = '9' --Utgått ur sortimentet+ FROM tmp_9999 WHERE ar

我正在尝试更新一个表,我想根据股票价值运行2个不同的集合senarios

执行一个senario的工作代码

UPDATE dbo.ar

    SET webPublish = '0', 
        ArtProdKlass = '9999',
        VaruGruppKod = '9999',
        ItemStatusCode = '9' --Utgått ur sortimentet+
        FROM tmp_9999
        WHERE ar.ArtNr = tmp_9999.art AND ar.lagsadloartikel < '1'    
我已经测试过这样的东西:

    IF  AR.lagsaldoartikel < '1'

    SET webPublish = '0', 
        ArtProdKlass = '9999',
        VaruGruppKod = '9999',
        ItemStatusCode = '9' --Utgått ur sortimentet+

    FROM tmp_9999
    WHERE ar.ArtNr = tmp_9999.art --Väljer ut artiklar som enbart finns i textfilen och har lagersaldo mindre än 1
ELSE

    SET webPublish = '1', 
        ArtProdKlass = '1',
        VaruGruppKod = '9999',
        ItemStatusCode = '8' --Utgått ur sortimentet

    FROM tmp_9999
    WHERE ar.ArtNr = tmp_9999.art --Väljer ut artiklar som enbart finns i textfilen och har lagersaldo mindre än 1
如果AR.lagsaldoartikel<'1'
设置webPublish='0',
ArtProdKlass='9999',
VaruGruppKod='9999',
ItemStatusCode='9'--Utgått ur sortimentet+
来自tmp_9999
其中ar.ArtNr=tmp_9999.art--Väljer ut artiklar som enbart finns i textfilen och har lagersaldo mindreän 1
其他的
设置webPublish='1',
ArtProdKlass='1',
VaruGruppKod='9999',
ItemStatusCode='8'--Utgått ur sortimentet
来自tmp_9999
其中ar.ArtNr=tmp_9999.art--Väljer ut artiklar som enbart finns i textfilen och har lagersaldo mindreän 1

使用
案例

UPDATE dbo.ar
    SET webPublish = '0', 
        ArtProdKlass = '9999',
        VaruGruppKod = '9999',
        ItemStatusCode = CASE WHEN AR.lagsaldoartikel < '1' THEN '9' ELSE '8' END
        FROM tmp_9999
        WHERE ar.ArtNr = tmp_9999.art
更新dbo.ar
设置webPublish='0',
ArtProdKlass='9999',
VaruGruppKod='9999',
ItemStatusCode=当AR.lagsaldoartikel<'1'然后是'9'或者'8'结束时的情况
来自tmp_9999
其中ar.ArtNr=tmp_9999.art

(如果
ItemStatusCode
等是数字,则应将其视为数字。)

如果
是程序性T-SQL的一部分。不能在关系语句中使用过程语句-使用
if
的唯一方法是在
if
的一个分支中使用两个单独的
update
语句。然而,这不是一个好主意——它不是并发安全的

要完成您要做的事情,一种方法是使用
case
语句-这只是一个表达式,因此可以在
set
子句中使用它,很好:

set webPublish = case when AR.lagsaldoartikel < '1' then '0' else '1' end
set webPublish=case当AR.lagsaldoartikel<'1'然后'0'否则'1'结束时
(其他论点等)

然而,我想警告你——这几乎肯定是个坏主意。当你意识到有十种不同的条件和一百种不同的可能值你可能想要的时候,它可能会在不久的将来回击你。考虑使用一种更惯用的关系方式来实现这一点——例如,从不同的表中获取条件和参数——现在不是必须的,但是如果您发现您的条件正在扩展到合理的大小,请记住如果需要的话改变命令的整个结构。
set webPublish = case when AR.lagsaldoartikel < '1' then '0' else '1' end