我不認爲有任何真正的好處,這在遊標,因爲主要的成本將要執行的語句,而不是構建它,但你可以使用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