我试图通过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。
你能否就此提出建议。
答案 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