Проверьте, существует ли база данных на SQL сервере - PullRequest
1 голос
/ 02 мая 2020

Я работаю над проектом с несколькими базами данных. Есть вероятность, что база данных может не существовать. Я проверяю, существует ли база данных, прежде чем выполнить запрос к таблице. Проблема в том, что я до сих пор не получаю базу данных "Курсы". Я хотел бы избавиться от этого сообщения, потому что я не хочу, чтобы клиент видел это сообщение.

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

1 Ответ

1 голос
/ 02 мая 2020

Оберните выражение, используя потенциально несуществующую базу данных в EXEC, чтобы оно компилировалось, только если эта ветвь взята.

Я использовал несколько более коротких идиом для проверки существования базы данных и столбца. Если вы придерживаетесь существующего столбца, ему нужно будет go внутри строки, которая EXEC ed, с кавычками, удвоенными, чтобы избежать их.

DECLARE @dbname sysname
SET @dbname = N'Courses'

IF DB_ID(@dbname) IS NOT NULL
  BEGIN
    IF COL_LENGTH('Courses.dbo.Course','isAvailableOnline') IS NULL
    BEGIN
       EXEC('ALTER TABLE Courses.dbo.Course ADD isAvailableOnline BIT NULL')
    END
  END
...