我写了这段代码:
SELECT o.name FROM sysobjects o,sysindexes i WHERE ( o.type = 'U'
and o.id = i.id
and i.indid in (0,1)
and i.rows = 0 )
order by o.name
GO
请你帮我丢弃那些空桌子?
答案 0 :(得分:3)
谨慎使用!
这将为您生成查询中所有表格的下拉脚本。当您打印变量@sql
时,由于PRINT
的限制,您只会看到其原始代码的前4000个字符声明。但是当你使用EXEC(@sql)
时,整个代码将被执行。
DECLARE @sql NVARCHAR(MAX)
SET @sql = ''
SELECT @sql = @sql + 'IF OBJECT_ID(''' + o.name + ''') IS NOT NULL DROP TABLE ' + o.name + CHAR(10)
FROM sysobjects o,sysindexes i
WHERE
(
o.type = 'U'
and o.id = i.id
and i.indid in (0,1)
and i.rows = 0
)order by o.name
PRINT @sql
答案 1 :(得分:0)
您也可以使用此查询:
DECLARE @SQL NVARCHAR(MAX) = N'';
SELECT @SQL = @SQL + N'IF OBJECT_ID('''+ t.name + ''') > 0 DROP TABLE ' + t.name + CHAR(10)
FROM sys.tables t
INNER JOIN sys.partitions p
ON t.object_id = p.object_id
WHERE t.name NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND p.rows = 0
GROUP BY t.name,
p.rows
ORDER BY t.name;
IF @SQL <> ''
EXEC sp_executesql @SQL
这将为所有没有记录的表生成脚本,然后执行此脚本。