2011-06-15 43 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 

这假定两个表中的列名相同。如果您有任何问题,请回复。

相关问题