Вы можете управлять своими вставками с помощью хранимой процедуры.Насколько я понимаю,
- пользователи могут выбрать комбинацию атрибутов, например
- просто 1
- 1 и 10 вместе
- 1,4, 5,10 (4 атрибута)
Они должны входить в таблицу как один "пакет" против (нового?) ProductAttributeId
Так что если(1,10) было выбрано, его нужно заблокировать, поскольку 1-2 и 10-2 уже существуют.
Что я предлагаю
Хранимая процедура должна принимать атрибуты в виде одного спискаНапример, '1,2,3' (через запятую, без пробелов, только целые числа)
Затем можно использовать UDF с разделением строк или встроенный трюк XML (как показано ниже), чтобы разбить его на строкипроизводная таблица.
Тестовая таблица
create table attrib (attributeid int, productattributeid int)
insert attrib select 1,1
insert attrib select 1,2
insert attrib select 10,2
Здесь я использую переменную, но вы можете включить в качестве входного параметра SP
declare @t nvarchar(max) set @t = '1,2,10'
select top(1)
t.productattributeid,
count(t.productattributeid) count_attrib,
count(*) over () count_input
from (select convert(xml,'<a>' + replace(@t,',','</a><a>') + '</a>') x) x
cross apply x.x.nodes('a') n(c)
cross apply (select n.c.value('.','int')) a(attributeid)
left join attrib t on t.attributeid = a.attributeid
group by t.productattributeid
order by countrows desc
Выход
productattributeid count_attrib count_input
2 2 3
- 1-й столбец дает вам productattributeid с наибольшим количеством совпадений
- 2-й столбец показывает, сколько атрибутов было найденоспойте один и тот же productattributeid
- В 3-м столбце указано, сколько атрибутов существует во входных данных
Если вы сравните последние 2 столбца и количество совпадений
- - вы можете использовать productattributeid для присоединения к продукту, у которого все эти атрибуты
- не совпадают - тогда вам нужно сделать вставку для создания новой комбинации