2015-03-31 2 views
-1

J'ai 2 tables avec lesquels je travaille:trigger SQL Server pour cascade insérer

  • WPCMA69_Connector
  • WPCMA70_ConnectorPocket

Les propriétés de la relation a une "mise à jour" et "supprimer" Cascade , Je développe un déclencheur pour gérer l'insertion. ConnectorName est le champ en commun que je veux insérer automatiquement de la table PCMA69 à la table PCMA70 après une commande d'insertion sur PCMA69.

  • PCMA69_ConnectorName_N

    • (PK, nvarchar (50, non null)
  • PCMA70_ConnectorName_N

    • (FK, nvarchar (50), non null)

Voici ce que j'ai essayé:

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 

Cependant, je reçois l'erreur:

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

+0

Votre erreur est que vous n'avez pas spécifié les colonnes pour votre insertion. Votre déclencheur a cependant un défaut majeur. Vous utilisez des variables scalaires qui indiquent qu'il ne peut pas gérer plusieurs opérations de ligne. Vous devez créer des requêtes basées sur des ensembles dans vos déclencheurs. –

+0

duplication possible de [Erreur: le nom de la colonne ou le nombre de valeurs fournies ne correspond pas à la définition de la table] (http://stackoverflow.com/questions/14408922/error-column-name-or-number-of-supplied-values-does -not-match-table-definition) –

Répondre

1

Vous devez faire quelque chose le long de ces lignes.

insert into WPCMA70_ConnectorPocket (WhateverYourColumnIsHere) 
Select PCMA69_ConnectorName_N from inserted 

Si vous avez plus de 1 ligne dans une opération, il ne ramasser une de ces lignes lorsque vous avez des variables scalaires impliquées.

+0

Merci. J'ai une autre question dans le même sens qui, à mon avis, ne nécessite pas une question distincte. Si j'insère dans une table avec des colonnes qui ne peuvent pas être nulles, cela n'est pas impliqué dans l'instruction d'insertion, comment puis-je résoudre cela? –

+0

Vous ne pouvez pas. Lorsqu'une colonne a une contrainte NOT NULL, vous DEVEZ fournir une valeur pour cette période de colonne. Il n'y a pas de travail autour. C'est le point d'une contrainte non nulle. –

+0

Ok. Ça a du sens. J'étais juste curieux de savoir s'il y avait une solution de rechange. –

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

Ceci corrige le problème mais la faille logique sous-jacente des déclencheurs scalaires est toujours présente. –