我的数据库中有大约50多个表现在我想要的是删除数据库中的所有表,除了少数。
现在我所知道的是sys.tables
是一个列出所有表的表,所以最初我运行了这样的查询
delete from sys.tables where name like '%DynamicSurgery' (or any other condition)
认为它可能有效。但正如我所料,它会抛出一个错误
不允许对系统目录进行临时更新。
请告诉我是否有办法删除SQL Server中的倍数?
答案 0 :(得分:13)
您可以使用动态查询DROP
所需的表格:
DECLARE @ExecSQL AS NVARCHAR (MAX) = '';
SELECT @ExecSQL = @ExecSQL +
'DROP TABLE ' + QUOTENAME(S.name) + '.' + QUOTENAME(T.name) + '; '
FROM sys.tables T
JOIN sys.schemas S ON S.schema_id = T.schema_id
WHERE T.name LIKE '%DynamicSurgery'
--PRINT @ExecSQL
EXEC (@ExecSQL)
答案 1 :(得分:0)
EXEC sys.sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL';
EXEC sp_MSforeachtable 'IF OBJECT_ID(''?'') NOT IN (
ISNULL(OBJECT_ID(''[dbo].[Table1]''),0),
ISNULL(OBJECT_ID(''[dbo].[Table2]''),0)
)
DELETE FROM ?';
EXEC sys.sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL';
答案 2 :(得分:-5)