2015-03-31 170 views
-1

我有2代表我的工作:SQL服務器觸發插入

  • WPCMA69_Connector
  • WPCMA70_ConnectorPocket

由於關係屬性有一個 「更新」 和 「刪除」 級聯,我正在開發一個處理插入的觸發器。 ConnectorName是我希望在PCMA69上的插入命令後自動從PCMA69表插入到PCMA70表中的字段。

  • PCMA69_ConnectorName_N

    • (PK,爲nvarchar(50,不爲空)
  • PCMA70_ConnectorName_N

    • (FK,NVARCHAR(50)非空)

這是我已經試過:

alter trigger trigConnector 
ON dbo.WPCMA69_Connector 
FOR INSERT 
AS 
BEGIN 
    SET NOCOUNT ON 

    DECLARE @ConnectorName nvarchar(50) 

    SELECT @Connectorname = PCMA69_ConnectorName_N 
    FROM inserted 

    INSERT INTO WPCMA70_ConnectorPocket 
    VALUES (@ConnectorName) 
END 

但是,我得到的錯誤:

Msg 213, Level 16, State 1, Procedure trigConnector, Line 9
Column name or number of supplied values does not match table definition.

+0

您的錯誤是因爲您沒有爲插入指定列。然而你的觸發器有一個主要的缺陷。您正在使用標量變量,這表明它無法處理多行操作。您需要在觸發器中創建基於集合的查詢。 – 2015-03-31 14:01:51

+0

[錯誤:提供的值的列名或數量與表定義不匹配]可能的重複(http://stackoverflow.com/questions/14408922/error-column-name-or-number-of-supplied-values-does -not-match-table-definition) – 2015-03-31 14:16:40

回答

1

你需要做的東西沿着這些路線。

insert into WPCMA70_ConnectorPocket (WhateverYourColumnIsHere) 
Select PCMA69_ConnectorName_N from inserted 

如果在一個操作中有多於一行,那麼只有在涉及標量變量時纔會選取其中的一行。

+0

謝謝。我還有另外一個問題,我不認爲需要一個單獨的問題。如果我插入一個不能爲空的列的表,那不涉及插入語句,我該如何解決這個問題? – 2015-03-31 14:12:48

+0

你不能。當列有NOT NULL約束時,你必須爲該列週期提供一個值。沒有工作。這是非空約束的一點。 – 2015-03-31 14:16:55

+0

好的。這就說得通了。我只是好奇,如果有一個解決辦法。 – 2015-03-31 14:18:38

0
insert into WPCMA70_ConnectorPocket (PCMA70_ConnectorName_N) 
values (@ConnectorName) 
+2

這解決了這個問題,但標量觸發器的基本邏輯缺陷仍然存在。 – 2015-03-31 14:03:09