ストアド プロシージャの 1 つに典型的な「無効な列名」がありますが、一般的な回避策で問題を解決する方法を理解するのに苦労しています :(
私のストアドプロシージャは次のようなことをします:
IF EXISTS (SELECT * FROM sysobjects o
JOIN syscolumns c
ON o.id = c.id
WHERE o.Name = 'Table_A'
AND c.Name = 'Column_A')
BEGIN
SELECT * FROM Table_B
JOIN Table_A
ON Table_B.Column_B = Table_A.Column_B
WHERE Table_A.Column_A = 1
FOR XML AUTO
END
ELSE
--Do something completely different
だから... Table_A.Column_A が無効であるというエラーが表示されますが、クエリでそれを参照するにはどうすればよいですか? 「FOR XML AUTO」部分までの文字列を作成する動的SQLを使用し、ストアドプロシージャを使用して「FOR XML AUTO」部分にタグを付けようとしましたが、それが問題かもしれませんが、同じエラーが発生します.
一部の人々が尋ねると確信している質問に答えるために、クエリ:
SELECT * FROM sysobjects o
JOIN syscolumns c
ON o.id = c.id
WHERE o.Name = 'Table_A'
AND c.Name = 'Column_A'
Column_A が Table_A にない場合に予想されるように、結果は得られません。
そして...いいえ、代わりにデータベース構造を変更することはできません。データベースインスタンスに応じて、テーブルにこの列が含まれる場合と含まれない場合があるため、この回避策が必要であり、「キャッチオール」が必要です.. .
明るいアイデアはありますか?