重複の可能性:
列の作成後に SQL Server の更新で無効な列名
何千ものマシンに存在するデータベースのテーブルからデータを抽出するクエリを作成しています。これらのデータベースを作成するソフトウェアには多くの変更が加えられているため、新しいデータベースには新しいテーブルや新しい列が含まれている可能性があるため、テーブル内の列の存在をチェックする SQL クエリを作成したいと考えていました。存在する場合は、列を含むクエリを実行します。存在しない場合は、その列を除外するクエリを実行します。
残念ながら、これまでに出くわしたすべての投稿は、欠落している列を扱っており、列が存在しない場合は列を追加しようとしています。私はそうしようとしていません。データベースへの読み取り専用アクセスがあり、古いデータベースを変更することはできません。
これが私が試した投稿の1つです: SQL Serverテーブルに列が存在するかどうかを確認する方法
この単純なクエリを考えてみましょう (これはまさに私がやろうとしていることではありませんが、物事を明確にする必要があります):
IF COL_LENGTH('E_BU','SCID') IS NOT NULL
BEGIN
SELECT BUID, SCID
FROM E_BU
END
ELSE
BEGIN
SELECT BUID
FROM E_BU
END
上記は、SCID 列を持つ新しいデータベース/テーブルに対して実行すると問題なく動作しますが、その列を持たないデータベース/テーブルに対して実行すると、次のエラーが発生します。
メッセージ 207、レベル 16、状態 1、行 5 列名 'SCID' が無効です。
このような状況を回避するためにクエリで実行できることはありますか、またはフロントエンド自体でチェックを実行する必要がありますか (おそらく、データベースに追加のクエリを送信して、列が存在するか存在しないかを判断し、適切なクエリを実行します)? これと同様の問題は、テーブル全体の場合にもあります。テーブルが存在しない場合、クエリはまったく実行されません。