【发布时间】:2018-11-19 15:11:57
【问题描述】:
我有 2 个这样的表:
CREATE TABLE t1
(
[SupplyTitle] [NVARCHAR](50) NOT NULL,
[EmployeeCode] INT NOT NULL,
[registered] DATETIME,
[modified] DATETIME
)
CREATE TABLE t2
(
[SupplyTitle] [NVARCHAR](50) NOT NULL,
[EmployeeCode] INT NOT NULL,
[AnnouncementID] INT NOT NULL
[registered] DATETIME,
[modified] DATETIME
)
t1 中的记录是这样的:
SupplyTitle EmployeeCode registered modified
-----------------------------------------------------------------------------
aaa 9001 2018-11-15 15:41:36.613 2018-11-15 15:41:36.613
bbb 9002 2018-11-15 15:42:36.613 2018-11-15 15:42:36.613
ccc 9003 2018-11-15 15:43:36.613 2018-11-15 15:43:36.613
t2中的AnnouncementID是由这个过程R_GetManageID生成的:
DECLARE @ManageID TABLE(ManageID INT)
DECLARE @AnnouncementID int
INSERT INTO @ManageID
EXEC R_GetManageID
SET @AnnouncementID = (SELECT TOP 1 * FROM @ManageID)
SELECT @AnnouncementID
我想将数据从 t1 插入到 t2。
插入规则为:
如果t2中没有t1的记录,则插入t2,关联条件为
t1.SupplyTitle = t2.SupplyTitle and t1.EmployeeCode = t2.EmployeeCode。如果t2中存在t1'记录,则更新
t2.modified = getdate()。
也就是说t2的AnnouncementID只有在没有达到关联条件的时候才会生成@AnnouncementID。
比如一开始T2是空的。
t1 中的记录是这样的:
SupplyTitle EmployeeCode registered modified
aaa 9001 2018-11-15 15:41:36.613 2018-11-15 15:41:36.613
bbb 9002 2018-11-15 15:42:36.613 2018-11-15 15:42:36.613
ccc 9003 2018-11-15 15:43:36.613 2018-11-15 15:43:36.613
如果@AnnouncementID的初始值为1001,则该值每次加一。
那么t2中生成的记录是这样的:
SupplyTitle EmployeeCode AnnouncementID registered modified
aaa 9001 1001 2018-11-19 12:00:00.000 2018-11-19 12:00:00.000
bbb 9002 1002 2018-11-19 12:00:00.000 2018-11-19 12:00:00.000
ccc 9003 1003 2018-11-19 12:00:00.000 2018-11-19 12:00:00.000
那么t1中的记录就变成了这样:
SupplyTitle EmployeeCode registered modified
aaa 9001 2018-11-15 15:41:36.613 2018-11-15 15:41:36.613
bbb 9002 2018-11-15 15:42:36.613 2018-11-15 15:42:36.613
www 9008 2018-11-15 15:43:36.613 2018-11-15 15:43:36.613
所以 t2 中的记录应该像这样添加一行:
SupplyTitle EmployeeCode AnnouncementID registered modified
aaa 9001 1001 2018-11-19 12:00:00.000 2018-11-19 12:00:00.000
bbb 9002 1002 2018-11-19 12:00:00.000 2018-11-19 12:30:00.000
ccc 9003 1003 2018-11-19 12:00:00.000 2018-11-19 12:30:00.000
www 9008 1004 2018-11-19 12:30:00.000 2018-11-19 12:30:00.000
前两条记录的modified 发生了变化。
那么我怎样才能插入(更新)t2 喜欢这个?
【问题讨论】:
-
您是否尝试过任何代码来插入或更新表格?
-
您的解决方案是
MERGE。看看下面的链接:Using MERGE in SQL Server to insert, update and delete at the same time 使用MERGE可以帮助你同步两个表。 -
@Mohammad Mohabbati 我不知道怎么处理,所以我还没有。
-
您需要
unique key来比较两个表中的数据。您的表中是否有任何唯一键? -
或在您的表中构成唯一键的某些字段的组合?
标签: sql sql-server sql-server-2008