SQL 过程 - 根据其他表的计数更改表列的值

标签 sql sql-server

我有两个表,propertycomponentcomponent.id_property = property.id

我正在尝试创建一个过程,该过程对所选属性的组件进行计数,如果所选属性没有组件,它将 property.id_state 更改为 1。

create PROCEDURE property_statement_change AS
BEGIN
declare @value int;

select 
    @value = count(c.value)
from
    component c
where
    c.id_property = 1
group by c.id_property

IF (@value = 0)
  UPDATE property
  SET id_state = 1
  WHERE property.id = 1
END

如果我执行存储过程,它不会改变任何东西,但选择和更新工作正常。我做错了什么?

最佳答案

如评论中所述,值是 NULL 而不是 0,因此代码如下:

create PROCEDURE property_statement_change AS
BEGIN
declare @value int;

select 
    @value = count(c.value)
from
    component c
where
    c.id_property = 1
group by c.id_property

IF (@value is NULL)
  UPDATE property
  SET id_state = 1
  WHERE property.id = 1
END

关于SQL 过程 - 根据其他表的计数更改表列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10815552/

相关文章:

sql - 操作必须使用可更新的查询 ASP 查询失败

sql - 组合选择前 1 个 SQL 语句

sql - 从 SQL Server 2008 中的所有表中选择所有列

c# - 存储过程需要参数但实际上提供了参数?

mysql - 选择最近添加的行

mysql - 如何在 MySQL 中更新具有不同值的多行?

sql - RODBC sqlQuery() 在应该返回 varchar(MAX) 时返回 varchar(255)

sql - SSIS OLEDB 连接问题与获取连接错误

sql - T-SQL XML 从节点问题中获取值?

sql-server - SQL Server 中 select 语句中的自动编号