触发器中的查询未给出预期结果

时间:2016-01-16 10:30:44

标签: sql-server sql-server-2005

我试图通过SQL Server 2005中的触发器获取以下输出。我正在使用此查询将age(列名称)的值更改为零,如果它小于零。

Create trigger agecheck 
on account 
for insert 
as begin
    Declare @age int

    select @age = age 
    from inserted 

    if @age < 0 
       set @age = 0; 

我能够成功执行此查询,但我没有得到理想的结果。我正在使用SQL Server 2005。

你能否就此提出建议。

1 个答案:

答案 0 :(得分:2)

您在触发器中执行的操作是将变量@age设置为0,如果它小于0.只需将年龄选择为类似的变量,不会将该变量链接到您的字段中桌子。

不仅如此,inserted virtual table中还可以包含多行。您的select语句只会将查询返回的最后age分配给变量。

您需要做的是加入插入的表,并在其主键上使用inserted虚拟表。

假设您的account表的键为account_id,那么将提供以下create语句:

CREATE TRIGGER agecheck 
  ON account
  AFTER INSERT
AS 
BEGIN
  UPDATE
    account
  SET
    age=0
  FROM
    inserted AS i
    INNER JOIN account AS a ON
      a.account_id=i.account_id
  WHERE
    i.age<0
END