我有一个像下面的桌子
ID Value ---------- 1 A 2 B 3 C 3 C 4 A 4 D 5 A 5 C 5 D
我想要一个查询或存储过程,如果我尝试插入相同类型的值组合,它将识别是否已经存在一个组合。例如:如果我要插入
6 A 6 D
让我知道ID 4已经存在相同的组合。在MSSQL中是否可能?
很少有评论:当我尝试插入新值时,Id将是新的,因此我们无法在表上搜索具有ID,值组合的重复行。我需要一种方法来搜索具有相同id值组合的重复值。
在上面的示例中,当我尝试插入
它将在表中搜索是否存在上表中具有相同ID的A和D的任何行,并且存在ID 4,因此当我尝试插入时,应该让我知道有重复的条目这。
这将为您提供来自@T的ID,这些ID已具有@NewValues中提供的值的组合。
declare @T table (ID int, Value char(1)) insert into @T values (1, 'A'),(2, 'B'),(3, 'C'),(3, 'C'), (4, 'A'),(4, 'D'),(5, 'A'),(5, 'C'), (5, 'D') declare @NewValues table(ID int, Value char(1)) insert into @NewValues values (6, 'A'), (6, 'D') select T.ID from @T as T inner join @NewValues as N on T.Value = N.Value group by T.ID having count(*) = (select count(*) from @NewValues)
结果:
ID 4 5
如果您只需要完全匹配,则因为ID行中还有一行值=’C’,所以不会返回ID = 5,您可以改用它。
select T.ID from @T as T left outer join @NewValues as N on T.Value = N.Value group by T.ID having count(N.Value) = (select count(*) from @NewValues) and count(*) = (select count(*) from @NewValues)
我看到您的表中有(3,’C’)和(3,’C’)。如果要使用输入(6,’C’)和(6,’C’)进行检测,则需要此查询。
select T.ID from @T as T left outer join (select distinct Value from @NewValues) as N on T.Value = N.Value group by T.ID having count(N.Value) = (select count(*) from @NewValues) and count(*) = (select count(*) from @NewValues)
填写`@NewValues?带有字符串拆分功能的表。
-- Paramenter to SP declare @ParamID int = 6 declare @ParamValues varchar(100) = 'A,D' declare @NewValues table(ID int, Value char(1)) insert into @NewValues select @ParamID, s from dbo.Split(',', @ParamValues)