Я пытаюсь использовать базу данных для школьного проекта, и я использую триггеры для настройки ссылочной целостности для одной таблицы. У меня есть стол «Адреса», в котором хранится адрес для людей, студий и директоров. Затем у меня есть таблица с названием Address Reference. В этой таблице указывается таблица адресов, и у нее есть два поля: ReferenceID и TableName, чтобы показать, для какой таблицы и строки указан этот адрес. У меня есть Constraint, поэтому TableName всегда будет действительным.Используйте имя столбца для указания предопределенной таблицы
Я пытаюсь настроить триггер, чтобы убедиться, что все вставленные строки действительны, и я могу это сделать, я просто пытаюсь его улучшить. Мой код будет выглядеть так:
SELECT *
FROM inserted
WHERE ReferenceID IN
(SELECT PersonID
FROM inserted.TableName)
Однако я нашел, что мне нужно использовать динамический sql. Поэтому я подумал примерно так:
SELECT *
FROM inserted
WHERE ReferenceID IN
(EXEC('SELECT PersonID FROM' + inserted.TableName))
Что не сработало, даже когда я удалил exec.
Я делаю это в SQL Server Management Studio с SQL Server 11.0.3128
Позвольте мне знать, если вам нужна дополнительная информация. Я осмотрелся, и я не нашел ответов на этот вопрос, который работает.
Зачем вам нужен динамический SQL? Требуется для задания? Кроме того, это очень полезно прочитать по теме: http://www.sommarskog.se/dynamic_sql.html – Anon
Чтобы уточнить, ваш триггер определен в таблице AddressReference? Это триггер AFTER или INSTEAD OF? – swandog
Помните, что таблица «вставлена» может содержать несколько строк, если имеется несколько вложений/обновлений.Что произойдет, если будет несколько строк с разными таблицами? Есть ли в таблице Studio столбец 'PersonID', как было предложено в вашей попытке, или manic sql также изменил имя столбца? – GarethD