2012-04-15 70 views
3

我有以下查询:的SQL Server 2008之前插入触发器

Insert into tblTest (ID, Name, Age) VALUES (1, 'TestName', 20); 

在了扳机我要检查 - 如果查询的ID等于1,再派查询:

Insert into tblTest (ID, Name, Age) VALUES (2, 'TestName', 21); 

否则,不要做任何事情。

问题是,我不知道如何保持参数,只是改变年龄,所以基本上我想发送SAME查询,并更改某个参数(在这种情况下,它的年龄参数)。

回答

3

即将插入的行可以在特殊的inserted表中找到。这里有一个例子:

if object_id('tblTest') is not null 
    drop table tblTest 
create table tblTest (id int, name varchar(50), age int) 
go 
create trigger trg_tblTest_BeforeInsert 
on tblTest 
after insert 
as begin 
    insert tblTest 
    select id + 1 
    ,  name 
    ,  age + 1 
    from inserted 
    where id = 1 -- Only for rows with id=1 
end 
go 
insert tblTest (id, name, age) values (1, 'TestName', 20) 
select * from dbo.tblTest 

此打印:

id name  age 
1 TestName 20 
2 TestName 21 
+0

谢谢,但如果我的表看起来不同,例如,表20列,我需要改变1列,并插入它,我应该一个一个地写所有列? – 2012-04-15 08:50:32

+0

是的,最好写出所有列。要保存输入,请右键单击SSMS中的表并选择“脚本为 - >选择”。这会生成一个基本的列列表。 – Andomar 2012-04-15 08:52:26

+0

好,很好。现在约:插入tblTest(ID,名称,年龄)值(1,'TestName',20),有没有什么办法只是运行用户的查询,而不是写作硬编码?比如,如果用户发送了其他详细信息而不是1,'TestName',20.如果我根本不写它,它会发送它吗? – 2012-04-15 08:54:38