使用CASE语句检查表中是否存在列 - SQL Server

时间:2013-05-22 08:58:01

标签: sql sql-server case

我正在使用其他一些C#代码中嵌入的 SQL server 语句;并且只想检查我的表中是否存在列。

如果列(此处ModifiedByUSer)确实存在,那么我想返回 1 true ;如果没有,那么我想返回 0 false (或类似的可以用C#解释的东西)。

我已经使用了如下的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 / bit。 任何帮助非常感谢!

5 个答案:

答案 0 :(得分:30)

最后的答案是上述两个的结合(我赞成两者都表示赞赏!):

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

答案 1 :(得分:13)

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

试试这个 -

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

答案 4 :(得分:1)

您可以签入系统'table column mapping'表

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'