我正在使用其他一些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。 任何帮助非常感谢!
答案 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'