插入多个(7)表,没有重复

时间:2017-11-09 15:52:13

标签: sql sql-server tsql

尝试创建一个查询/ SP,它将从一个表中获取数据并将其插入多个表中。我有一个主表,一开始就像临时表一样放入所有内容。

临时表

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)
 )

当员工经过验证时,将根据需要将其拆分为多个表,这些表只需要临时表中的一两个字段。我在下面列出的UserEmail表是其中一个表。我正试图让它立即用于一个表然后我猜我将只复制插入部分并将表名和属性更改为新表

这是我到目前为止所拥有的。

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

这会将记录插入到UserEmail表中,但会创建重复的用户,我不能这样做,所以我尝试添加这个,但它没有按照我的意愿去做。

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

非常感谢任何指导或帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

如果你只想在用户已经存在的情况下不插入UserEmail,那么只需要扩展

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

否则请查看MERGE语法(https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql