同じテーブル内の2 つの列 (プログラム コードとテスト コード) の間に 1 対 1 の関係を確立したいと考えています。同じテスト コードを使用するすべてのテストに、同じプログラム コードを持たせたい。
最初に考えたのは、UDF を使用して、同じテスト コードが 2 つの異なるプログラムに対応するケースを見つけることでした。t-sqlは、UDP を使用するチェック制約に違反することを t-sql が許可するのはなぜですか
INSERTS
?UPDATES
次に考えたのは、ロジックを UDF からチェック制約自体に移動することでした。しかし、t-sql は、チェック制約ではサブクエリが許可されていないと言っています。これは、構文を使用できないことも意味し
EXISTS
ます (サブクエリも使用すると思います)。ALTER TABLE [dbo].[mytable] WITH CHECK ADD CONSTRAINT [oneProgramPerTest] CHECK
( (select COUNT(*) from mydb.dbo.mytable u1 inner join mydb.dbo.mytable u2 on u1.testcode=u2.testcode and u1.progcode <> u2.progcode )=0 )
(1) udf または (2) サブクエリなしでこのロジックを強制する方法がない限り、プログラム コードの「ダミー」テーブルを作成し、テスト コード間に 1 対 1 の関係を強制する必要があるようです。 myTable とダミー テーブルから。これは本当に醜いように見えるので、もっと良い方法が必要です。右?