我不认为有任何真正的好处,这在游标,因为主要的成本将要执行的语句,而不是构建它,但你可以使用SQL Server的XML扩展结合您的语句,然后使用sp_executesql
执行它们:
DECLARE @SQL NVARCHAR(MAX) = (SELECT 'DROP TABLE Update_Backups.' +
QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' +
QUOTENAME(OBJECT_NAME(t.object_id)) + ';
'
FROM sys.tables t
WHERE t.modify_date < DATEADD(year,-01, GETDATE())
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)');
PRINT @SQL -- FOR DEBUGGING YOU CAN CHECK THE STATEMENT ABOUT TO BE EXECUTED
EXECUTE sp_executesql @SQL;
NB我假设你正在使用基于使用目录视图sys.tables
编辑的SQL服务器
SQL Server 2005的更新语法:
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = (SELECT 'DROP TABLE Update_Backups.' +
QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' +
QUOTENAME(OBJECT_NAME(t.object_id)) + ';
'
FROM sys.tables t
WHERE t.modify_date < DATEADD(year,-01, GETDATE())
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)');
PRINT @SQL -- FOR DEBUGGING YOU CAN CHECK THE STATEMENT ABOUT TO BE EXECUTED
EXECUTE sp_executesql @SQL;
哪个DBMS?为了解决这个问题,你可能需要产品特定的功能。 – jarlh
取而代之的是把这个查询转换成字符串并执行它 – techno