ユーザー定義関数を使用していくつかのビューをリファクタリングしましたが、それらが同じであることを確認したいと思います。
これをテストするための小さなスクリプトを作成しました。
SET ANSI_NULLS OFF
GO
SELECT TOP 1000 [DealNumber]
,...others
FROM OLD_VIEW
EXCEPT
SELECT TOP 1000 [DealNumber]
,...others
FROM NEW_VIEW
これを適用すると、結果として多数の行が得られます。ただし、いずれかの行から DealNumber を取得し、次を実行するとします。
SET ANSI_NULLS OFF
GO
SELECT [DealNumber]
,...others
FROM OLD_VIEW
WHERE DealNumber = 'MyDealNumber'
EXCEPT
SELECT [DealNumber]
,...others
FROM NEW_VIEW
WHERE DealNumber = 'MyDealNumber'
これは、予想どおり、空のレコード セットを返します。
別のアプローチとして、前者のテストを行う関数 Test_View_Correctness を作成しました。ただし、次のように実行すると:
SELECT TOP 1000 [DealNumber] from OLD_VIEW
where DealNumber IN (SELECT a.DealNumber
FROM Test_View_Correctness(DealNumber) as a)
例外アプローチが確実に機能するようにするにはどうすればよいですか?