2017-11-09 13 views
1

Es wird versucht, eine Abfrage/SP zu erstellen, die Daten aus einer Tabelle aufnimmt und in mehrere Tabellen einfügt. Ich habe eine Haupttabelle, in die alles zu Beginn wie eine temporäre Tabelle eingefügt wird. je nach BedarfIn mehrere (7) Tabellen ohne Duplikate einfügen

Temp Tabelle

CREATE TABLE Employee 
(
    userID INT IDENTITY(1,1) NOT NULL, 
    userName VARCHAR(50) NULL, 
    FirstName VARCHAR(50) NULL, 
    LastName VARCHAR(50) NUll, 
    UserPassWd VARCHAR(50) NULL, 
    EmailId VARCHAR(100) NULL 

    CONSTRAINT PK_Employee PRIMARY KEY (userID) 
) 

als wenn Mitarbeiter überprüft wird er in mehrere Tabellen aufgeteilt werden, die nur ein Feld oder zwei aus der temporären Tabelle benötigen. Die UserEmail Tabelle, die ich unten aufgeführt habe, ist eine der Tabellen. Ich versuche, es jetzt für einen Tisch zu arbeiten, und dann vermute ich, ich werde nur den Einfügeteil kopieren und den Tabellennamen und die Attribute zu den neuen Tabellen ändern

Hier ist was ich bisher habe.

DECLARE @EMAIL VARCHAR(100) 
DECLARE @USERID INT 

SELECT @USERID = userID 
     ,@EMAIL = EmailId 

FROM Employee 

WHERE userID = 1004 


INSERT INTO UserEmail 
    (
     EmailAddress  
     ,EmailTypeID  
     ,ExternalUserID 
     ,Active 
     ,CreatedByID 
     ,CreatedDate 
     ,UpdatedByID 
     ,UpdatedDate 

    ) 

SELECT @EMAIL -- Email Address 
    ,1   -- Email Type     
    ,1   -- ExternalUserID 
    ,1   -- Active 
    ,1   -- CreatedByID 
    ,CURRENT_TIMESTAMP -- CreatedDate 
    ,1 
    ,CURRENT_TIMESTAMP -- UpdatedDate 

FROM Employee X 

WHERE 1=1 
     AND X.userID = '####'-- INSERT USERID HERE for testing 

Dadurch wird der Datensatz in die Tabelle einfügen UserEmail aber doppelte Benutzer erstellen, die ich so versucht haben kann ich nicht diese Zugabe, aber es nicht tut, was ich will es tun.

WHERE 1=1 AND NOT EXISTS( SELECT userID FROM Employee WHERE userID = 1004 )

Jede mögliche Anleitung oder Hilfe sehr geschätzt werden würde. Danke!

+2

Wie wäre es einfach das Hinzufügen DISTINCT auf Ihre Anfrage überprüfen? –

+0

Das ist eine gute Idee, krank geben Sie es. – whisk

+0

Ich verstehe nicht viel von Ihrem Skript. Sie haben eine Tabelle, aus der Sie bestimmte Werte in verschiedene Tabellen einfügen müssen. Warum verwenden Sie nicht einfach eine 'in UserEmail SELECT einfügen'? Warum alle Variablen? 'EmailId' ist nicht in der'Emplyee'Tabelle, wie können Sie sie in' @EMAIL' auswählen? Warum hat die Tabelle "UserEmail" kein Attribut, das mit einem "Benutzer" verknüpft ist? Warum speichern Sie Datumsangaben auch als Ganzzahl? Und schließlich, was halten Sie für ein Duplikat? Sie fügen nur "EmailId" ein, der Rest ist nur Standardwerte, ist es wirklich eine 'EmailId' oder eine' EmailAddress'? – HoneyBadger

Antwort

2

Wenn Sie nur nicht, wie zu UserEmail einfügen, wenn der Benutzer bereits existiert nur

erweitern
INSERT INTO UserEmail .... 
    SELECT .... 
    FROM .... 
    WHERE .. 
     AND NOT EXISTS (select 1 from UserEmail where EmailAddress = X.emailAddress) 

Ansonsten MERGE Syntax (https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql)

+0

Das klärt auf, was mit meiner 'NOT EXIST' where-Klausel falsch war, danke. Ich schaue jetzt in die 'MERG'-Syntax. – whisk

Verwandte Themen