私はこの問題に直面して、今日はいくつかのストアドプロシージャを作成しています。列が存在しないというメッセージが表示され始めました。それは普通のことではありません。何百ものデータベースがあり、時には欠落することもあります。その列がヌルでない場合のみ選択していますが、列名が無効ですか?
しかし、私がそれらを逃していたテーブルに列を追加しようとすると、物事が変わってしまいました。
は、これら2つのコードサンプルをチェックアウト:
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'MNTSetup')
BEGIN
IF COL_LENGTH('dbo.MNTSetup','VehicleChecklistEMail') is not null
BEGIN
select VehicleChecklistEMail from dbo.MNTSetup
END
END
この1つのエラーアウト。しかし、これを実行しようとすると:
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'MNTSetup')
BEGIN
IF COL_LENGTH('dbo.MNTSetup','VehicleChecklistEMail') is null
BEGIN
--i put code to show the db name here
END
END
これは結果がないことを示しています。
私のSQLでは、基本的に、電子メール列が欠落している既存のMNTSetupテーブルがないことを伝えていますが、その列を選択しようとするとこのエラーが発生します。
何が起こっている可能性がありますか?
これら2つのクエリは何を返しますか? \t SELECT COL_LENGTH( 'dbo.MNTSetup'、 'VehicleChecklistEMail')および \t SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MNTSetup' – Amit
問題を解決するには動的SQLを使用する必要があります。あなたの最初のクエリでは、SQLエンジンはあなたのIF句(またはより良い、あなたのIF句を無視します)の結果を知りませんし、単純にあなたのクエリを解析しようとすると、その列[VehicleChecklistEMail]が存在しないので、エラーを見つけること – jyao
どちらの[DBMS](https://en.wikipedia.org/wiki/DBMS)製品を使用していますか? "_SQL_"は特定のデータベース製品の名前ではなく、クエリ言語です(コードは非標準SQLです) –