29

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

如果列(ModifiedByUSer此处)确实存在,那么我想返回1true;如果不是,那么我想返回0false(或可以在 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

但不知道如何根据结果有条件地返回值/布尔值/位。非常感谢任何帮助!

4

5 回答 5

43

最终答案是上述两种情况的结合(我对两者都投了赞成票以表达我的感激之情!):

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
于 2013-07-01T08:29:38.333 回答
14
select case
         when exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Tags' AND COLUMN_NAME = 'ModifiedByUser')
         then 0
         else 1
       end
于 2013-05-22T09:07:09.763 回答
3
SELECT *
FROM ...
WHERE EXISTS(SELECT 1 
        FROM sys.columns c
        WHERE c.[object_id] = OBJECT_ID('dbo.Tags')
            AND c.name = 'ModifiedByUser'
    )
于 2013-06-29T06:35:48.983 回答
2

试试这个——

SELECT *
FROM ...
WHERE EXISTS(SELECT 1 
        FROM sys.columns c
        WHERE c.[object_id] = OBJECT_ID('dbo.Tags')
            AND c.name = 'ModifiedByUser'
    )
于 2013-05-22T09:09:42.793 回答
1

您可以检查系统“表列映射”表

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'
于 2013-05-22T09:12:28.123 回答