当foo
尚未创建数据库并且 II 运行此
IF db_id(N'foo') IS NOT NULL
BEGIN
ALTER DATABASE [foo] SET OFFLINE
GO
DROP DATABASE [foo]
GO
END
我收到一条消息
无法删除数据库“foo”,因为它不存在或您没有权限。
为什么?
我已经确认 sql 语句select db_id(N'foo')
返回NULL
.
当foo
尚未创建数据库并且 II 运行此
IF db_id(N'foo') IS NOT NULL
BEGIN
ALTER DATABASE [foo] SET OFFLINE
GO
DROP DATABASE [foo]
GO
END
我收到一条消息
无法删除数据库“foo”,因为它不存在或您没有权限。
为什么?
我已经确认 sql 语句select db_id(N'foo')
返回NULL
.
这是解析错误,而不是运行时错误。您可以通过删除命令(这些命令无论如何
GO
都不能存在于块中)并使用动态 SQL 来避免这种情况。IF
为什么
IF DB_ID()
不只是把DROP
里面TRY/CATCH
(或让它出错)?您可能想要
WITH ROLLBACK IMMEDIATE
在ALTER
.或者
当然,这种方法(
OFFLINE
首先)将保持数据和日志文件完好无损,这意味着如果它们是在默认位置创建的,如果您尝试再次创建相同的数据库,您首先需要移动或重命名这些文件,或在新文件规范中手动指定不同的名称。下面应该工作
注意:如果您将数据库脱机并删除数据库,mdf 和 ldf 文件仍将保留在磁盘上,您必须手动删除它们。