【发布时间】:2014-10-01 13:35:53
【问题描述】:
我正在使用合并进行插入或删除,但我不确定它应该是什么样子。我有一个映射表,将分类法映射到支持的语言。该表如下所示:
TaxonomyLanguageID(PK) | TaxonomyID(FK) | LanguageID(FK)
我想要做的是将临时表与上表合并,其中临时表将包含分类法支持的语言列表。例如:
TaxonomyID|LanguageID
456, 2
456, 3
456, 9
我尝试过的看起来像这样(选择用于测试,稍后这将是一个临时表):
MERGE dbo.TaxonomyLanguages as t
using (SELECT 5395 as TaxonomyID, 2 as LanguageID) as s
ON (s.TaxonomyID=T.TaxonomyID AND s.LanguageID=t.LanguageID)
WHEN NOT MATCHED BY TARGET THEN
INSERT(TaxonomyID,LanguageID) VALUES(S.TaxonomyID,s.LanguageID)
WHEN NOT MATCHED BY SOURCE AND T.TaxonomyID=s.TaxonomyID
THEN DELETE;
我想要做的是如果不匹配则插入,如果不匹配则删除,但只删除目标中与源中找到的分类 ID 匹配的那些行。
但我得到一个“只有目标列在'当源不匹配'子句中允许”错误。
关于如何解决这个问题(或应该如何完成)的任何想法?
我正在寻找的示例。如果我有来源喜欢
TaxonomyID|LanguageID
4000, 2
4000, 3
还有一个像这样的目标:
TaxonomyLanguageID|TaxonomyID|LanguageID
1, 3000 2
2, 4000 1
3, 4000 2
最终结果是:
TaxonomyLanguageID|TaxonomyID|LanguageID
1, 3000 2
3, 4000 2
4, 4000 3
【问题讨论】:
标签: sql sql-server merge