динамический оператор SQL для удаления данных во всех таблицах конкретной базы данных на сервере SQL на основе условия фильтра (где) - PullRequest
0 голосов
/ 29 мая 2018

Я хотел бы написать динамический SQL, который будет удалять данные во всех таблицах конкретной базы данных, где [удалено] = 1.Я также хотел бы показать количество записей, которые удаляются из каждой таблицы.моя база данных называется Test1.Итак, мой обычный запрос для одной таблицы:

удалить из Test1.DimCustomer, где [удалено] = 1 (я хочу сделать его динамическим для всех таблиц в базе данных Test1

Как и ясобираюсь сделать это в производстве для всех таблиц в базе данных, я хотел бы знать количество строк удаляемых записей. Кроме того, я хотел бы знать план возврата для этого динамического запроса. Итак, кто-нибудь может помочь?Спасибо.

1 Ответ

0 голосов
/ 29 мая 2018

Используйте системные представления, чтобы помочь вам построить динамический SQL.Нечто подобное должно работать для вас.

declare @SQL nvarchar(max) = 'begin transaction;'

select @SQL = @SQL + 'select count(*), TableName = ' + quotename(s.name) + '.' + quotename(t.name) + ' from ' + quotename(s.name) + '.' + quotename(t.name) + ' where [deleted] = 1; delete from ' + quotename(s.name) + '.' + quotename(t.name) + ' where [deleted] = 1;'
from sys.tables t
join sys.schemas s on s.schema_id = t.schema_id

select @SQL = @SQL + 'rollback transaction;'

select @SQL
--exec sp_executesql @SQL

Как только вы почувствуете себя комфортно, вы можете раскомментировать последнюю строку, чтобы проверить это.Затем измените откат на коммит.

...