Пользовательские типы таблиц

Я пишу хранимую процедуру, которая должна использовать определенный пользователем тип таблицы, чтобы удалить несколько строк без необходимости многократного запуска хранимой процедуры. Мой вопрос заключается в том, можно ли написать один определяемый пользователем тип таблицы (вместо 17; по одному для каждой таблицы) и добавить столбец, указывающий таблицу, к которой он относится. Например, вот мой оператор удаления:

DELETE FROM Table1
WHERE A_ID IN (SELECT ID FROM UserDefinedTableType WHERE TblClm = 'Table1'

Могу ли я использовать один и тот же определяемый пользователем тип таблицы для приведенного выше оператора и следующего оператора

DELETE FROM Table2
WHERE A_ID IN (SELECT ID FROM UserDefinedTableType WHERE TblClm = 'Table2'

Мне интересно, сработает это или нет. Я новичок в этой концепции, и мне не удалось найти хорошую документацию по использованию пользовательских типов таблиц таким образом.

Спасибо за любую помощь.


person Wes Palmer    schedule 09.05.2016    source источник
comment
Я не вижу ничего плохого в этом подходе, но я такого раньше не видел. Я бы использовал соединение в вашем операторе удаления вместо IN, но, честно говоря, это будет то же самое.   -  person Sean Lange    schedule 09.05.2016
comment
Хорошо спасибо. Я мог бы использовать соединение, но я просто предпочитаю IN, чтобы я мог явно указать, какие идентификаторы удаляются. Спасибо за предложение.   -  person Wes Palmer    schedule 09.05.2016
comment
Вы бы присоединились к ID. :)   -  person Sean Lange    schedule 09.05.2016


Ответы (1)


Это немного длинно для комментария, и форматирование будет убито. Вот что я имел в виду, используя соединение вместо in.

DELETE t1
FROM Table1 t1
JOIN UserDefinedTableType udt ON t1.A_ID = udt.ID 
WHERE udt.TblClm = 'Table1'
person Sean Lange    schedule 09.05.2016
comment
Я знаю, что вы имели в виду, говоря об объединении. Я использую их все время, я просто предпочитаю IN, потому что для меня это немного чище. - person Wes Palmer; 09.05.2016