SQL服务器合并使用过滤器删除
问题描述:
即时通讯使用合并做插入或删除,我不知道该怎么看。我有一个映射表,将分类法映射到受支持的语言。该表的样子:SQL服务器合并使用过滤器删除
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;
我想这个做的是插入,如果它不匹配,如果不匹配则删除,但只删除目标中与源中找到的taxonomyID匹配的那些行。
但是,我得到一个“只有目标列允许在'不匹配的源'子句'错误。
关于如何解决这个问题(或者应该如何完成)的想法?
我在找什么样的例子。如果我有一个源像
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
答
你必须把它分成两个通行证,因为数量关键字段不同。
Select 456 as TaxonomyID, 2 as LanguageID
into TaxonomyLanguages
INSERT INTO [dbo].[TaxonomyLanguages]
([TaxonomyID]
,[LanguageID])
VALUES
(456, 3)
,(456, 9)
GO
select *
from [TaxonomyLanguages]
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);
MERGE dbo.TaxonomyLanguages as t
using (SELECT 5395 as TaxonomyID, 2 as LanguageID) as s
ON (s.TaxonomyID=T.TaxonomyID)
WHEN NOT MATCHED BY SOURCE
THEN DELETE;
select *
from [TaxonomyLanguages]
基于评论,改变第二合流:
MERGE dbo.TaxonomyLanguages as t
using (SELECT 456 as TaxonomyID, 3 as LanguageID) as s
ON (s.TaxonomyID=T.TaxonomyID)
WHEN MATCHED
and (s.LanguageID <> T.LanguageID)
THEN DELETE;
我可以有我的问题很少,但是这只是删除所有其他行。我只想删除与源中的TaxonomyID匹配的行,但不匹配languageID。我用一个例子更新我的问题 – 2014-10-01 14:07:34
好的。然后使用MATCHED和过滤器。 – 2014-10-01 14:14:54
MERGE dbo.TaxonomyLanguages为t 使用(选择456作为TaxonomyID,3为LanguageID)为S ON(s.TaxonomyID = T.TaxonomyID) WHEN MATCHED 和(s.LanguageID T.LanguageID) 然后删除; – 2014-10-01 14:15:18