更新布尔数据类型时,我可以在PostgreSQL中执行以下操作:
$legal->card
当我想对SQL Server执行相同操作时出现语法错误。
Msg 156,Level 15,State 1,Line 8
关键字附近的语法不正确 '和'
如何在SQL Server中完成相同类型的查询?
答案 0 :(得分:0)
在SQL Server中:
UPDATE demo
SET ks = 1
因为您的声明id in (select id from demo)
表示您希望将此更新应用于所有行。
如果要将此更新限制为某些行,则将添加WHERE子句,如下所示
UPDATE demo
SET ks = 1
WHERE your_condition_is_satisfied
答案 1 :(得分:0)
似乎你的简化示例有点太简化了,并且引起了一些混乱。也许这会更好地说明。假设我们有两个表:
tbl_parent
parent_id parent_name has_partner single_parent
--------- ----------- ----------- -------------
1 parent1 true
2 parent2 false
3 parent3 true
4 parent4 false
tbl_child
child_id child_name parent_id
-------- ------------- ---------
101 parent1child1 1
201 parent2child1 2
202 parent2child2 2
如果我们想填充PostgreSQL中的tbl_parent.single_parent column
,我们可以做到
UPDATE tbl_parent
SET single_parent = (NOT has_partner) AND parent_id IN (SELECT parent_id FROM tbl_child)
导致
parent_id parent_name has_partner single_parent
--------- ----------- ----------- -------------
1 parent1 true false
2 parent2 false true
3 parent3 true false
4 parent4 false false
SQL Server显然不支持SET表达式中的子查询。但是,我们可以将子查询放在T-SQL UPDATE语句的FROM子句中,如下所示:
UPDATE tbl_parent
SET single_parent = (~ has_partner) & (child_check.has_children)
FROM
tbl_parent
INNER JOIN
(
SELECT DISTINCT
tbl_parent.parent_id,
IIF(tbl_child.parent_id IS NULL, CONVERT(BIT, 'FALSE'), CONVERT(BIT, 'TRUE')) AS has_children
FROM
tbl_parent
LEFT JOIN
tbl_child
ON tbl_parent.parent_id = tbl_child.parent_id
) child_check
ON tbl_parent.parent_id = child_check.parent_id;