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

Whe*_*ill 21 sql sql-server case

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

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

我已经使用了如下的CASE语句:

SELECT cast(case WHEN EXISTS (select ModifiedByUser from Tags) 
            THEN 0 
            ELSE 1 
            END as bit)
Run Code Online (Sandbox Code Playgroud)

但是如果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
Run Code Online (Sandbox Code Playgroud)

但是不知道如何基于结果有条件地返回值/ bool/bit.任何帮助非常感谢!

Whe*_*ill 32

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

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
Run Code Online (Sandbox Code Playgroud)

  • 由于原始文章提到使用C#之类的东西来处理结果,所以我建议也将值转换为sql中的某个位。这样,C#实际上可以将返回值作为布尔值使用。 (2认同)

GSe*_*erg 14

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