【发布时间】:2020-08-16 11:18:51
【问题描述】:
我正在处理具有多个数据库的项目。数据库可能不存在。在对表运行查询之前,我正在检查数据库是否存在。问题是我仍然没有退出数据库“课程”。我想摆脱那条消息,因为我不希望客户看到这条消息。
DECLARE @dbname nvarchar(128)
SET @dbname = N'Courses'
IF EXISTS (SELECT name
FROM master.dbo.sysdatabases
WHERE ('[' + name + ']' = @dbname
OR name = @dbname))
BEGIN
IF NOT EXISTS (SELECT 1 FROM Courses.INFORMATION_SCHEMA.COLUMNS C WHERE C.COLUMN_NAME IN ('isAvailableOnline') AND C.TABLE_NAME IN ('Course'))
BEGIN
ALTER TABLE Courses.dbo.Course ADD isAvailableOnline BIT NULL
END
END
【问题讨论】:
-
旁白:您应该使用
QuoteName来引用对象名称,而不是'[' + name + ']'。 -
@HABO,谢谢,我一定会改用 QuoteName 代替。
-
无论如何您都不需要为此烦恼,因为
dbo.sysdatabases中的名称将不加引号地存储。并且dbo.sysdatabases已被弃用(由sys.databases替换,它也将被取消) -
@MartinSmith - 在这种情况下,似乎 OP 正在使用
@dbname作为 可能 已被引用的参数,因此尝试将其与来自的值匹配带或不带引号的表。是的,他们应该使用sys.databases。 -
啊,是的,错过了。 DB_ID 无论如何都不关心它是否被引用
标签: tsql sql-server-2012