2017-09-01 8 views
0

私はこの問題に直面して、今日はいくつかのストアドプロシージャを作成しています。列が存在しないというメッセージが表示され始めました。それは普通のことではありません。何百ものデータベースがあり、時には欠落することもあります。その列がヌルでない場合のみ選択していますが、列名が無効ですか?

しかし、私がそれらを逃していたテーブルに列を追加しようとすると、物事が変わってしまいました。

は、これら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テーブルがないことを伝えていますが、その列を選択しようとするとこのエラーが発生します。

何が起こっている可能性がありますか?

+0

これら2つのクエリは何を返しますか? \t SELECT COL_LENGTH( 'dbo.MNTSetup'、 'VehicleChecklistEMail')および \t SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MNTSetup' – Amit

+0

問題を解決するには動的SQLを使用する必要があります。あなたの最初のクエリでは、SQLエンジンはあなたのIF句(またはより良い、あなたのIF句を無視します)の結果を知りませんし、単純にあなたのクエリを解析しようとすると、その列[VehicleChecklistEMail]が存在しないので、エラーを見つけること – jyao

+0

どちらの[DBMS](https://en.wikipedia.org/wiki/DBMS)製品を使用していますか? "_SQL_"は特定のデータベース製品の名前ではなく、クエリ言語です(コードは非標準SQLです) –

答えて

0

これでデータベースが破損してしまいました。私が持っているのと同じことが起こると、ハードウェアやソフトウェアのトラブルシューティングを行い、破損を解決する必要があります。

0

最初のクエリでテーブル名を忘れましたか?そこに、何の結果もないテーブルのスキーマにスキーマ名「DBO」に変更される場合も、存在する代わりのSELECT * FROMで、SELECT 1 FROM

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 
+0

"FROM dbo.MNTSetup"を追加しても、私はまだエラーが発生します。 "無効な列名VehicleChecklistEMail – proseidon

0

チェックこのクエリを使用して。私はスキーマが 'dbo'ではないと思う。

IF EXISTS (SELECT 1 
      FROM INFORMATION_SCHEMA.TABLES 
      WHERE TABLE_NAME = 'MNTSetup' 
       AND TABLE_SCHEMA = 'dbo') 
BEGIN 
    IF COL_LENGTH('dbo.MNTSetup','VehicleChecklistEMail') IS NOT NULL 
    BEGIN 
     SELECT VehicleChecklistEMail 
     FROM dbo.MNTSetup 
    END 
END 
関連する問題