2017-07-13 18 views
1

私は、このクエリがTaxPayerIDが見つからないことを告げる理由を把握していません。最初は明確にチェックしていますnTrucksテーブルのTaxPayerID列を含むデータベースを使用します。SQLクエリ、列は存在する必要がありますが、結果は状態ではありません

sp_MSforeachdb 
' 
IF EXISTS (SELECT * FROM [?].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''nTrucks'' AND COLUMN_NAME = ''TaxPayerID'') 

BEGIN 
    SELECT "?", nTrucks.UnitNumber, ntrucks.Companyid, nCompanyData.CompanyName, nTrucks.Owner, nTrucks.TaxPayerID 
    FROM nTrucks 
    INNER JOIN nCompanyData ON nTrucks.CompanyID = nCompanyData.CompanyID 
    WHERE nTrucks.Owner like ''%Trucker%'' 
END 
' 

'無効な列名' TaxPayerID 'が表示されています。エラー、私はそれがこの列を含んでいないデータベースからであると仮定します。

ここに誰でも私に骨を投げることができれば、シンプルな「あなたはダミーだよ、このやり方!」と、私はとても感謝しています。

JF

+2

動的SQL内で動的SQLを使用する必要があります。コンパイルエラーがあり、これは 'if'ロジックが実行される前に発生します。 –

+0

BEGINの後の行でnTrucks.TaxPayerIDを取り出すと実行されます。だからこそ私は困惑している。 – JFManiac

+1

2番目のステートメントは '[?] .. nTrucks'から選択する必要があります。 'sp_MSforeachdb'は自動的にデータベースを変更しません。 –

答えて

1

あなたはダミーです! (あなたはそれを求め:))

をこのエラーをデバッグする方法:

はエラーをスローし、データベースを見つけて、それがコンパイルされますかどうかを確認するために、直接その上で、実際のSQLクエリを実行してみてください。

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''nTrucks'' AND COLUMN_NAME = ''TaxPayerID'') 

BEGIN 
    SELECT nTrucks.UnitNumber, ntrucks.Companyid, nCompanyData.CompanyName, nTrucks.Owner, nTrucks.TaxPayerID 
    FROM nTrucks 
    INNER JOIN nCompanyData ON nTrucks.CompanyID = nCompanyData.CompanyID 
    WHERE nTrucks.Owner like ''%Trucker%'' 
END 

これは失敗します。

SQLサーバーは、実行時ではなくクエリの解析時にスキーマをチェックすることがわかっています。 そして、あなたは@GordonLinoffの提案に従うと、次のように、動的SQLにSELECTクエリを変換:

sp_MSforeachdb 
' 

IF EXISTS (SELECT * FROM [?].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''nTrucks'' AND COLUMN_NAME = ''TaxPayerID'') 

BEGIN 
    EXEC( 
    ''SELECT "?", nTrucks.UnitNumber, ntrucks.Companyid, nCompanyData.CompanyName, nTrucks.Owner, nTrucks.TaxPayerID 
    FROM [?]..nTrucks 
    INNER JOIN [?]..nCompanyData ON nTrucks.CompanyID = nCompanyData.CompanyID 
    WHERE nTrucks.Owner like ''''%Trucker%'''' 
    '') 
END 

' 

(私は右の私の引用符を得た願っています)

クエリは、中央nCompareDataテーブルを参照するようになっている場合nCompareDataの前に[?]..を削除してください

+1

'sp_MSforeachdb'は現在のデータベースを自動的に変更しません。私は問題が「FROM nTrucks」にあると信じています。それは 'FROM [?]でなければなりません.. nTrucks' –

+0

@ Nick.McDermaid - 私は確かにダミーです – Alex

+0

私は間違っているかもしれません - 私はダミーかもしれません! –

関連する問題