如何根据多个参数用不同的值更新sql中的多行
我希望根据几个具有不同值的参数更新多行。如何根据多个参数用不同的值更新sql中的多行,sql,sql-server,Sql,Sql Server,我希望根据几个具有不同值的参数更新多行。 我是什么意思?很高兴你这么问。 我的桌子现在看起来像这样: ------------- MyTable client_id api_id index msg_id settings 123 4 10 6 0 123 4 10 7 1 123 4 10 8 1 123
我是什么意思?很高兴你这么问。
我的桌子现在看起来像这样:
-------------
MyTable
client_id api_id index msg_id settings
123 4 10 6 0
123 4 10 7 1
123 4 10 8 1
123 4 11 7 1
123 5 10 8 1
456 4 10 9 1
更改后我想要的表是:(仅更改设置列)
我现在想做的是:
UPDATE myTable SET settings =
CASE client_id
WHEN '123' THEN
CASE api_id
WHEN '4' THEN
CASE index
WHEN '10' THEN
CASE msg_id
WHEN '6' THEN 1
WHEN '7' THEN 2
WHEN '8' THEN 1
WHEN '9' THEN 0
...
END
END
END
END
更新myTable集设置=
案例客户号
那么什么时候是"123"?
案件编号
那么什么时候是'4'呢
病例索引
那么什么时候是‘10’呢
案件编号
当“6”时,则为1
当‘7’然后是‘2’
当'8'时,则为1
当'9'时,则为0
...
结束
结束
结束
结束
我一直得到的例外是
无法在“设置”列、表“myTable”中插入空值;列不允许空值。更新失败
因此,我的问题是:
我问的可能吗
如果可能的话。我做错了什么
提前感谢。您需要为每个
案例
表达式添加ELSE
,并设置默认值(我猜是0):
或者更简单,正如他在评论中所建议的,只需用ISNULL
将整个案例包装起来:
UPDATE myTable SET settings =
ISNULL(CASE client_id
WHEN '123' THEN
CASE api_id
WHEN '4' THEN
CASE index
WHEN '10' THEN
CASE msg_id
WHEN '6' THEN 1
WHEN '7' THEN 2
WHEN '8' THEN 1
WHEN '9' THEN 0
...
END
END
END
END, 0)
在您的情况下,如果中的client_id与'123'不同,则将设置为NULL,我认为您的列设置不应为NULL
如果在“123”时删除第一个
CASE client\u id
它可以正常工作如果每个嵌套CASE表达式的默认值相同,您只需将最外层的CASE表达式用ISNULL包装即可。@SeanLange:您是对的,当然,我为什么没有考虑过它?@SeanLange您能给我一个示例吗?
UPDATE myTable SET settings =
CASE client_id
WHEN '123' THEN
CASE api_id
WHEN '4' THEN
CASE index
WHEN '10' THEN
CASE msg_id
WHEN '6' THEN 1
WHEN '7' THEN 2
WHEN '8' THEN 1
WHEN '9' THEN 0
...
ELSE 0
END
ELSE 0
END
ELSE 0
END
ELSE 0
END
UPDATE myTable SET settings =
ISNULL(CASE client_id
WHEN '123' THEN
CASE api_id
WHEN '4' THEN
CASE index
WHEN '10' THEN
CASE msg_id
WHEN '6' THEN 1
WHEN '7' THEN 2
WHEN '8' THEN 1
WHEN '9' THEN 0
...
END
END
END
END, 0)