我很难想到如何处理这个问题:我将一些遗留数据迁移到SQL 2008 SP1 64 BIT。遗留模式使用代理密钥用于事件ID,例如, event1,event2,enventn和出于未知原因,包括一个附加列“valid_event_id”,例如,具有“event_ID ='1'”的行将具有“”valid_event_ID ='25'“。我们没有计划确定有效事件字段的来源或原因,并假设其存在原因。
快进....我们已使用GUID作为event_ID唯一标识符将此表迁移到新架构中,并将原始event_id交叉传输到新GUID中,没有任何问题。
现在我正在努力使用合并声明......甚至不知道从哪里开始,如何将旧的valid_event_id交叉遍历到相应的新GUID。
E.g
第一行旧表
[OLD_EVENT_ID]'event1',
[OLD_VALID_EVENT_ID]'event25'
第25行旧表:
[OLD_EVENT_ID]'event25',
[OLD_VALID_EVENT_ID]'NULL'
第一行新表:
[new_EVENT_ID]'E42DDB84-1666-E111-A1B2-0023AE8F2836'
(匹配event1)
[new_EVENT_ID]'E482CEE5-1E66-E111-A1B2-0023AE8F2836'
(匹配事件25)
[event_ID]'EE482CEE5-1E66-E111-A1B2-0023AE8F2836'的行也将计算[valid_event_ID]'E482CEE5-1E66-E111-A1B2-0023AE8F2836'
我希望这是有道理的!
以下是相关表格的片段,其中有几条记录可以举例说明:
8C436BD5-8665-E111-A1B2-0023AE8F2836
行的[ATBI_valid_event_id]为Event_009056
。目标是使用GUID A9A67562-1E66-E111-A1B2-0023AE8F2836
填充相同行的[Valid_Event_ID]列,该GUID对应于具有event_009056
的另一行。请注意,行A9A67562-1E66-E111-A1B2-0023AE8F2836
没有[ATBI_VALID_EVENT_ID],因此不受此操作的限制,除了提供新GUID以回溯跟踪valid_event_id的
CREATE TABLE #events(
[Event_ID] [uniqueidentifier] NULL,
[Valid_Event_ID] [uniqueidentifier] NULL,
[ATBI_EVENT_ID] [nvarchar](100) NULL,
[ATBI_VALID_EVENT_ID] [nvarchar](50) NULL
) ON [PRIMARY]
GO
INSERT #events([Event_ID], [Valid_Event_ID], [ATBI_EVENT_ID], [ATBI_VALID_EVENT_ID]) VALUES (N'8c436bd5-8665-e111-a1b2-0023ae8f2836', NULL, N'Event_009055', N'Event_009056')
INSERT #events([Event_ID], [Valid_Event_ID], [ATBI_EVENT_ID], [ATBI_VALID_EVENT_ID]) VALUES (N'4f476bd5-8665-e111-a1b2-0023ae8f2836', NULL, N'Event_009929', N'Event_009928')
INSERT #events([Event_ID], [Valid_Event_ID], [ATBI_EVENT_ID], [ATBI_VALID_EVENT_ID]) VALUES (N'd8486bd5-8665-e111-a1b2-0023ae8f2836', NULL, N'Event_039507', N'Event_039508')
INSERT #events([Event_ID], [Valid_Event_ID], [ATBI_EVENT_ID], [ATBI_VALID_EVENT_ID]) VALUES (N'52fd817c-8d65-e111-a1b2-0023ae8f2836', NULL, N'Event_005734', N'Event_005735')
INSERT #events([Event_ID], [Valid_Event_ID], [ATBI_EVENT_ID], [ATBI_VALID_EVENT_ID]) VALUES (N'05a791f5-1566-e111-a1b2-0023ae8f2836', NULL, N'Event_005735 ', NULL)
INSERT #events([Event_ID], [Valid_Event_ID], [ATBI_EVENT_ID], [ATBI_VALID_EVENT_ID]) VALUES (N'7dea8f4a-1e66-e111-a1b2-0023ae8f2836', NULL, N'Event_009928 ', NULL)
INSERT #events([Event_ID], [Valid_Event_ID], [ATBI_EVENT_ID], [ATBI_VALID_EVENT_ID]) VALUES (N'a9a67562-1e66-e111-a1b2-0023ae8f2836', NULL, N'Event_009056 ', NULL)
INSERT #events([Event_ID], [Valid_Event_ID], [ATBI_EVENT_ID], [ATBI_VALID_EVENT_ID]) VALUES (N'd93afbc1-1e66-e111-a1b2-0023ae8f2836', NULL, N'Event_039508 ', NULL)
答案 0 :(得分:2)
UPDATE e SET Valid_Event_ID = e2.Event_ID
FROM #events AS e
INNER JOIN #events AS e2
ON e.ATBI_VALID_EVENT_ID = e2.ATBI_EVENT_ID
WHERE e.ATBI_VALID_EVENT_ID IS NOT NULL;
SELECT * FROM #events;
结果:
Event_ID Valid_Event_ID ATBI_EVENT_ID ATBI_VALID_EVENT_ID
8C43.... A9A6.... Event_009055 Event_009056
4F47.... 7DEA.... Event_009929 Event_009928
D848.... D93A.... Event_039507 Event_039508
52FD.... 05A7.... Event_005734 Event_005735
05A7.... NULL Event_005735 NULL
7DEA.... NULL Event_009928 NULL
A9A6.... NULL Event_009056 NULL
D93A.... NULL Event_039508 NULL