我在掌握使用CASE语句时遇到了一些麻烦(习惯使用If / Then)。我想将其转换为CASE格式:
If DATEPART(Month,Datetime) = 04
Then UPDATE DB1
SET column1 = (SELECT Value FROM DB2)
因此,如果当前日期时间的月份与4(4月)匹配,则使用DB2的Value列中的值更新DB1的column1。这看起来如何使用CASE?
答案 0 :(得分:2)
我不清楚case
与此有什么关系。 case
语句通常用于select
来执行条件语句。您的update
似乎更像是:
update db1
set column1 = db2.value
from db1 join
db2
on db1.foo = db2.bar
where DATEPART(Month, db1.Datetime) = 4;
但是从你的问题中判断出你真正想做的事情有点难以理解。
编辑:(回应评论)
对于今天的日期,where
子句应为:
where datepart(month, getdate()) = 4
您可以使用where
。
if (datepart(month, getdate()) = 4) . . .
需要join
(或子查询),因为问题涉及两个表。
答案 1 :(得分:0)
IF ((SELECT DATEPART(MONTH, GetDate())) = 04)
UPDATE
db1
SET
column1 = db2.value
FROM
db2
WHERE
db1.key = db2.key
DATEPART()
嵌入在SELECT
中,()
本身包含在WHERE
中。
需要THEN
子句来指定db2中的哪些行用于更新db1中的哪些行。
在T-SQL中没有{{1}}。有关详细信息,请参阅here。
答案 2 :(得分:0)
我认为您的查询没有相同的CASE声明。
在MSDN
中查看CASE快递评估条件列表并返回多个可能的结果表达式之一。
您的查询是一个条件UPDATE操作,它不会返回任何内容。你能在这里澄清你的意图吗?