Sql server 使用SET命令IF/ELSE更新表格
我正在尝试更新一个表,我想根据股票价值运行2个不同的集合senarios 执行一个senario的工作代码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
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