最近在处理SQL Server的相关业务,需要使用SQL语句清理数据库,遇到了个神奇的现象,有些数据库居然清空不成功,错误提示如下:无法对 表 'xxxxx' 执行 删除,因为它不存在,或者您没有所需的权限。
最后研究一番发现数据库中使用了架构这玩意,导致直接根据表名的话不能删除,所以如果要删除的话要把表对于的架构获取出来,然后调用删除语句:drop table [架构名].表名.
最后根据目前能力总结了清空数据库的SQL语法如下:
declare @sql varchar(8000)
while (select count(*) from sysobjects where type = 'U') > 0
begin
select @sql='drop table [' + A.ownname + '].' + [A.name]
from
(
select schema_id, name,ownname=schema_name(schema_id) from sys.tables
)
A FULL JOIN(
select name from sysobjects WHERE (type = 'U')
)B
on A.name=B.name
ORDER BY 'drop table [' + A.ownname + '].' + [A.name]
exec(@sql)
end
后期如果还有改进的方法到时候再改。