【发布时间】:2017-04-11 19:54:22
【问题描述】:
我有一个以以下语句开头的长存储过程:
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = N'DBNAME')
BEGIN
CREATE DATABASE [DBNAME]
END;
如果我的本地服务器上不存在数据库,则应该在它上创建它。问题是几乎所有时间它都通过存储过程的这一部分而不创建它,这会干扰来自同一过程的其他代码。另一方面,在极少数情况下,它会创建数据库。我的问题是:有没有更好的方法来检查数据库是否存在,因为我已经尝试了至少 10 个。
我尝试过的其他方法:
IF NOT EXISTS (SELECT 1 FROM sys.databases WHERE name = N'DBNAME')
BEGIN
CREATE DATABASE [DBNAME]
END;
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'DBNAME')
BEGIN
CREATE DATABASE [DBNAME]
END;
IF NOT EXISTS (SELECT name FROM master.dbo.sys.databases WHERE name = N'DBNAME')
BEGIN
CREATE DATABASE [DBNAME]
END;
但如果我在我的 sp 之外运行它,它会完美运行,这让我认为它可能是与权限相关的一些问题。
【问题讨论】:
-
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = N'DBNAME') 已经在 2014 年工作并显示正确的结果。你有什么错误吗?
-
你有没有使用任何回滚作为你的过程的一部分。如果是,那么检查它没有被回滚..
-
不,当我尝试在存储过程中使用它时,我只是得到数据库'DBNAME'不存在。我没有使用交易。
-
如果您使用的是
Transaction,请确保您使用commit。 -
MSDN Documentation 应该有帮助!
标签: sql sql-server database sql-server-2014