В приведенном ниже примере используется каталогное представление sys.tables
и конкатенация агрегированных строк вместо курсора для задачи.
DECLARE @SQL nvarchar(MAX) = (
SELECT N'TRUNCATE TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + N'.' + QUOTENAME(name) +N';'
FROM sys.tables
WHERE name like N'%DTS%'
FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)');
EXECUTE sp_executesql @SQL;
В SQL Serveer 2017 и более поздних версиях вы можете использовать STRING_AGG
:
DECLARE @SQL nvarchar(MAX) = (
SELECT STRING_AGG ('TRUNCATE TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + N'.' + QUOTENAME(name),';')
FROM sys.tables
WHERE name like N'%DTS%'
);
EXECUTE sp_executesql @SQL;
Обратите внимание, что эта схема квалифицирует имена и использует QUOTENAME
для обработки случаев, когда имя не соответствует правилам именования обычных идентификаторов.