29

他の C# コードに埋め込まれたSQL サーバーステートメントを使用しています。テーブルに列が存在するかどうかを確認したいだけです。

列 (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

しかし、結果に基づいて値/ブール/ビットを条件付きで返す方法がわかりません。どんな助けでも大歓迎です!

4

5 に答える 5

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 に答える
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 に答える