如何解决SQL合并语句协助
在尝试执行此步骤之前,我正在尝试执行SQL合并。
-
下降温度表(如果存在)
-
创建一个临时表(源)
USE Kronos Create table #tempGlobal --Source ( [800#] [bigint] NOT NULL,[FirstName] [varchar](20) NOT NULL,[MI] CHAR(20) NULL,[LastName] [nvarchar](30) NOT NULL,[NickName] CHAR(15) NULL,[Position] [nvarchar](50) NULL,[Department] [varchar](30) NULL,[EmployeeStatus] [char](20) NOT NULL,[CredentialDocument] VARCHAR(10) NOT NULL,[RehireDate] [date] NULL,[DateHired] [date] NOT NULL,[DateTerminated] [date] NULL)
-
从CSV批量插入到临时表中
-
合并源表和目标表
我没有收到任何工作错误,但是在我的测试会话中数据没有得到更新。
第4步:
` Select t.[800#],t.[FirstName],t.[MI],t.[LastName],t.[NickName],t.[Position],t.[Department],t.[EmployeeStatus],t.[CredentialDocument],t.[RehireDate],t.[DateHired],t.[DateTerminated]
From [dbo].[Employees] t --Target
Merge [dbo].[Employees] t
using [dbo].[#tempGlobal] s --Source Temp Table
on t.[800#] = s.[800#] --Stays the same even if rehired
WHEN MATCHED
AND
(
s.[LastName] <> t.[LastName]
OR s.[Position] <> t.[Position]
OR s.[Department] <> t.[Department]
OR s.[EmployeeStatus] <> t.[EmployeeStatus]
OR s.[RehireDate] <> t.[RehireDate]
OR s.[DateTerminated] <> t.[LastName]
)
THEN
UPDATE SET LastName = s.LastName,Position = s.Position,Department = s.Department,EmployeeStatus = s.EmployeeStatus,RehireDate = s.RehireDate,DateTerminated = s.DateTerminated
WHEN NOT MATCHED --Source table doesn't match target table so we need to update the target table to match
THEN INSERT
(
[800#],[FirstName],[MI],[LastName],[NickName],[Position],[Department],[EmployeeStatus],[CredentialDocument],[RehireDate],[DateHired],[DateTerminated])
VALUES
(
s.[800#],s.FirstName,s.MI,s.LastName,s.NickName,s.Position,s.Department,s.EmployeeStatus,s.CredentialDocument,s.RehireDate,s.DateHired,s.DateTerminated);`
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。