我有一个使用XQuery存储在临时表中的XML数据源,并已成功将其插入到数据库中。
我的问题是我不知道如何检查某些内容是否存在,然后根据该语句将其删除。这是插入代码:
SELECT
N.value('id-number[1]', 'VARCHAR(10)') as IdNumber,
N.value('irrelevant1[1]', 'VARCHAR(12)') as Irrelevant1,
N.value('irrelevant2[1]', 'VARCHAR(14)') as Irrelevant2,
N.value('irrelevant3[1]', 'VARCHAR(16)') as Irrelevant3,
N.value('irrelevant4[1]', 'VARCHAR(18)') as Irrelevant4,
N.value('irrelevant5[1]', 'VARCHAR(20)') as Irrelevant5,
INTO #TempTable
FROM @xml.nodes('nodes/here') AS X(N)
INSERT INTO [main-entry] SELECT * FROM #TempTable
现在,在插入之前,我想要做的是找出数据库中是否存在基于id-number
的记录。如果存在,则删除它。它在子记录上有CASCADE DELETE
选项,因此也应该将其与主条目记录一起删除。
以下是我正在使用的内容:
IF (SELECT IdNumber FROM #TempTable) IN (SELECT [id-number] FROM [main-entry])
BEGIN
DELETE FROM [main-entry] WHERE [id-number] = ''
END
这显然不起作用,因为两者都选择了大量的id号。
我该怎么做?
DELETE
它。INSERT
条记录。 (插入代码已完成)我对id-number有一个唯一的索引,因此如果该数字已经存在,它将不允许我插入任何其他内容。所以,我认为处理这个的最好方法是删除所述记录。
我已经尝试了MERGE
语句,但我无法将INSERT
代码添加到WHEN MATCHED THEN
,因此我必须运行两次查询才能插入。 WHEN MATCHED THEN DELETE
可以使用,但不允许我插入其他记录。
答案 0 :(得分:0)
您可以使用 MERGE 删除条目,然后使用现有代码进行插入。
MERGE [main-entry] as Dest
USING ( select * from #TempTable
) as Source
on Dest.[id-number] = Source.[id-number]
WHEN MATCHED
THEN DELETE