Удалить строку в произвольной таблице, используя данные из оператора выбора - PullRequest
0 голосов
/ 06 октября 2010

У меня есть таблица с именем «изменения», которая содержит список номеров записей, которые пользователь изменил во многих других таблицах. Я хотел бы удалить запись, на которую ссылается строка в изменениях (и сама строка изменений) в одном запросе SQL.

WITH name AS ( SELECT tableName FROM [changes] WHERE id = 80 ),
   number AS ( SELECT  changeRecnum FROM [changes] WHERE id = 80 )

DELETE FROM [name] WHERE changeRecnum = number

DELETE FROM [changes] WHERE id = 80

К сожалению, я продолжаю получать сообщения о том, что changeRecnum и number являются недопустимыми именами столбцов.

1 Ответ

0 голосов
/ 06 октября 2010

Вам нужно использовать динамический SQL, чтобы использовать переменную в качестве имени таблицы. Я думаю, что лучшим способом было бы установить ваше имя и номер в качестве @ переменных.

DECLARE @name varchar(100)
DECLARE @number int
DECLARE @SQL varchar(max)

SET @name = (SELECT tableName FROM [changes] WHERE id = 80)
SET @number = ( SELECT  changeRecnum FROM [changes] WHERE id = 80 )

SET @SQL = 'DELETE FROM [' + @name + '] WHERE changerecnum = ' + CAST(@number as varchar)
PRINT (@SQL)
EXEC (@SQL)

DELETE FROM [changes] WHERE id = 80

Вам нужно прочитать эту статью о динамическом SQL . Для этих сценариев требуется чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...