他のC#コードに埋め込まれたSQLサーバーステートメントを使用しています。また、テーブルに列が存在するかどうかを確認したいだけです。
列(ここでModifiedByUSer
)が存在する場合、1またはtrueを返します。そうでない場合は、または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
しかし、結果に基づいて条件付きで値/ブール/ビットを返す方法がわかりません。助けていただければ幸いです!
最終的な答えは、上記の2つを組み合わせたものでした(感謝を示すために両方を支持しました!)。
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
select case
when exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Tags' AND COLUMN_NAME = 'ModifiedByUser')
then 0
else 1
end
SELECT *
FROM ...
WHERE EXISTS(SELECT 1
FROM sys.columns c
WHERE c.[object_id] = OBJECT_ID('dbo.Tags')
AND c.name = 'ModifiedByUser'
)
これを試してください-
SELECT *
FROM ...
WHERE EXISTS(SELECT 1
FROM sys.columns c
WHERE c.[object_id] = OBJECT_ID('dbo.Tags')
AND c.name = 'ModifiedByUser'
)
システムの「テーブル列マッピング」テーブルで確認できます
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'