2011-06-15 48 views
0

我使用SQL Server 2005中,當創建一個觸發器,我得到了以下錯誤:觸發不工作,想不通爲什麼

代碼

-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 
CREATE TRIGGER dbo.dublicator 
    ON dbo.PLACE_ORDER 
    FOR INSERT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    INSERT INTO dbo.ADAPT_DR.DEBTS(CLIENT_CODE,CLIENT_NAME,CHARGES) 

END 
GO 

當我執行我得到出現以下錯誤:

Msg 156, Level 15, State 1, Procedure dublicator, Line 17 Incorrect syntax near the keyword 'END'.

我試過解決它,但似乎沒有任何工作。

回答

1

你的insert聲明是錯誤的 - 你說的插入表debts,但不告訴它插入什麼。我的建議是閱讀並獲得一些基本的SQL知識(選擇,插入,更新)。

0

您的INSERT聲明不完整。它應該是這樣的:

INSERT INTO dbo.ADAPT_DR.DEBTS(CLIENT_CODE,CLIENT_NAME,CHARGES) 
         values (value1, value2, value3) 

在指定的列的相應數據類型中提供值。

+0

切勿在觸發器中使用values子句。 – HLGEM 2011-06-15 14:38:00

+0

採取了點。 *在大多數情況下是有意義的。雖然,請小心一般化。沒有黃金不可改變的規則。 – 2011-06-15 14:42:16

+0

另外,我從不使用*從不*。事情變了...... – 2011-06-15 14:45:06

3

由於這是一個觸發器,我假設進入第二個表的值將來自插入。聲明使用VALUES的答案是有效的SQL語法,但不是您要查找的內容。你會想要使用inserted魔術表。

INSERT INTO dbo.ADAPT_DR.DEBTS(CLIENT_CODE,CLIENT_NAME,CHARGES) 
SELECT CLIENT_CODE, CLIENT_NAME, CHARGES 
FROM inserted 

這假定兩個表中的列名相同。如果您有任何問題,請回復。

相關問題