2012-04-15 100 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