1

私は2つのテーブルを持っています:

  • SupplierLocationカラム付きId | SupplierId | ThirdPartyId

  • Supplierカラム付きId | Company

SQL Server 2008 を使用しています。不適切に記述されたクエリを修正しようとしています。たとえば、次のクエリは、サブクエリに間違った列名があっても (Supplier テーブルに ThirdPartyId がありません)、エラーをスローせずに実行されます。

SELECT * 
FROM SupplierLocation 
WHERE SupplierId IN (SELECT ThirdPartyId 
                     FROM Supplier 
                     WHERE Id = @id)

このようなクエリでサブクエリが正しいことを確認する方法はありますか?

ありがとう!

4

4 に答える 4

1

エイリアスを使用して列名を修飾します。

SELECT * 
FROM SupplierLocation as SL
WHERE SL.SupplierId IN (SELECT S.ThirdPartyId 
                     FROM Supplier as S
                     WHERE S.Id = @id)

サブクエリにさまざまなソースからのデータを含めることは完全に正当です。

SELECT *, ( select Id + ThirdParty + @Id from Supplier where Id = @Id ) as GuessWhat
FROM SupplierLocation as SL
WHERE SL.SupplierId IN (SELECT S.ThirdPartyId 
                     FROM Supplier as S
                     WHERE S.Id = @id)

ソースについて明示していない場合は、SQL Server が解決できるものを見つけて驚くかもしれません。JOIN を使用してすべての列名を修飾することをお勧めします。

SSMS の解析ツールは、すべてではなく一部のエラーを検出します。便利な出発点です。

于 2013-06-14T19:19:43.437 に答える
0

一言で言えば、いいえ-少なくとも、簡単な方法ではありません。

コードがエラーをスローせずに実行される場合 (ただし、出力が正しくないことがわかっている場合)、アプリケーション ロジックにエラーがあります。

コードがエラーをスローせずに実行され、それが正しく機能しているかどうかわからない場合、それを検証するために振ることができる魔法の杖はありません。

これがテストの目的です: 実行されるコードが正しく機能することを確認することです。

コードレビューもこの目的に役立ちます。

于 2013-06-14T19:19:16.013 に答える