尝试创建一个查询/ 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
)
非常感谢任何指导或帮助。谢谢!
答案 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)