Sql-Server-2008-R2
使用前綴刪除表的腳本
我正在執行 SQL Serve 2008,我們有一些明顯用於測試的測試表。表的前綴是Test_,我的問題是,這個腳本會刪除我執行它的數據庫上所有前綴為Test_的表嗎?
declare @cmd varchar(4000) declare cmds cursor for select 'drop table [' + Table_Name + ']' from INFORMATION_SCHEMA.TABLES where Table_Name like 'Test%' open cmds while 1=1 begin fetch cmds into @cmd if @@fetch_status != 0 break exec(@cmd) end close cmds; deallocate cmds
這個腳本會刪除我執行它的數據庫上所有前綴為 Test_ 的表嗎?
是的,它將
DROP
表格。DELETE 通常用於刪除數據。您的腳本將物理刪除表。另外,請不要使用
INFORMATION_SCHEMA
,也不需要游標。您的腳本可以使用動態 sql 輕鬆編寫。**編輯:**在評論中,@MartinSmith指出了他的一個很好的答案- 我不知道……但在連接時讓人大開眼界。(老實說,我從來沒有遇到過,但現在會意識到問題!再次感謝馬丁!)
唯一保證的機制如下:
- 使用游標以特定順序遍歷行並連接值
- 用於帶有 ORDER BY 的 xml 查詢以生成連接值
- 使用 CLR 聚合(這不適用於 ORDER BY 子句)
DECLARE @sql nvarchar(max) = N''; SELECT @sql = (select N'drop table ' + QUOTENAME(t.name) + N';' FROM sys.tables AS t WHERE t.name LIKE N'Test_%' order by object_id FOR XML PATH(''), TYPE ).value('.','nvarchar(max)') print @sql ; -- caution below will ACTUALLY drop the tables. -- review the output and then uncomment below line EXEC sys.sp_executesql @sql;