我有一个很长的存储过程,它以以下语句开头:
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 之外运行它,它会完美运行,这让我认为它可能是与权限相关的一些问题。
原文由 StefanL19 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题似乎是缺少“GO”来终止语句。这不起作用…
但是,这确实…
特洛伊。 #