Используйте оператор CASE для проверки наличия столбца в таблице - SQL Server - программирование
Подтвердить что ты не робот

Используйте оператор CASE для проверки наличия столбца в таблице - SQL Server

Я использую оператор SQL server, встроенный в некоторый другой код С#; и просто хотите проверить, существует ли столбец в моей таблице.

Если столбец (ModifiedByUSer здесь) существует, я хочу вернуть 1 или true; если это не так, я хочу вернуть 0 или false (или что-то подобное, которое можно интерпретировать на С#).

Я использую оператор CASE, например:

SELECT cast(case WHEN EXISTS (select ModifiedByUser from Tags) 
            THEN 0 
            ELSE 1 
            END as bit)

Но если ModifiedByUser не существует, я получаю invalid column name вместо возвращаемого значения.

Я также рассмотрел:

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Tags' AND COLUMN_NAME = 'ModifiedByUser')
  BEGIN // Do something here to return a value
  END

Но не знаю, как условно вернуть значение/bool/бит на основе результата. Любая помощь очень ценится!

4b9b3361

Ответ 1

Окончательный ответ был комбинацией двух из вышеперечисленных (я поддержал оба, чтобы выразить свою признательность!):

select case 
   when exists (
      SELECT 1 
      FROM Sys.columns c 
      WHERE c.[object_id] = OBJECT_ID('dbo.Tags') 
         AND c.name = 'ModifiedByUserId'
   ) 
   then 1 
   else 0 
end

Ответ 2

select case
         when exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Tags' AND COLUMN_NAME = 'ModifiedByUser')
         then 0
         else 1
       end

Ответ 3

SELECT *
FROM ...
WHERE EXISTS(SELECT 1 
        FROM sys.columns c
        WHERE c.[object_id] = OBJECT_ID('dbo.Tags')
            AND c.name = 'ModifiedByUser'
    )

Ответ 4

Попробуйте этот вариант -

SELECT *
FROM ...
WHERE EXISTS(SELECT 1 
        FROM sys.columns c
        WHERE c.[object_id] = OBJECT_ID('dbo.Tags')
            AND c.name = 'ModifiedByUser'
    )

Ответ 5

Вы можете проверить таблицу "сопоставление столбцов таблицы"

SELECT count(*)
  FROM Sys.Columns c
  JOIN Sys.Tables t ON c.Object_Id = t.Object_Id
 WHERE upper(t.Name) = 'TAGS'
   AND upper(c.NAME) = 'MODIFIEDBYUSER'