1

重複の可能性:
SQL テーブルで重複する値を見つける

私は一般的にT-SqlおよびSqlプログラミングにまったく慣れていないので、誰かが私を正しい方向に導いてくれることを願っています. これが私の問題です。簡単にするために、AppliedBandwidthSourceKey と AppliedBandwithSource の 2 つの列しかないテーブルがあります。それぞれ列 A と列 B と呼びます。

列 A と B が主キーを構成します。列 A の値が既に存在するレコードを挿入しようとすると、すぐに主キー制約違反が発生し、列 A が存在しないが列 B が存在する場合、一意キー制約違反が発生します。私の質問は、「値のペア」がテーブルに既に存在するかどうかを確認するにはどうすればよいですか? 場合は何もしません。それ以外の場合は挿入します。

tsql の merge ステートメントと if not exists ステートメントを使用して、同様の問題に対するいくつかの解決策を見てきましたが、その概念を理解することはできません。どんな助けでも大歓迎です。

4

4 に答える 4

1

実際に最初に作業を行う必要はありません。。。結局のところ、それが制約が行っていることです。

代わりに、try/catchブロックについて学びます。

begin try
    insert into t(a, b) values('a', 'b')
end try
begin catch
    print 'Oops! There was a problem, maybe a constraint violation for example'
end catch;

このステートメントは挿入を試みます。失敗した場合、それは「キャッチ」部分に行き、あなたはあなたが望むことを何でもすることができます(問題を無視することを含む)。ドキュメントはかなり明確です(http://msdn.microsoft.com/en-us/library/ms175976.aspx)。

于 2012-07-10T15:38:22.860 に答える
1

あなたはこれを行うことができます:

IF NOT EXISTS (select * from yourtable where yourfield1 = 'field1' and yourfield2 = 'field2')
BEGIN
    INSERT INTO ...
END

データが見つからない場合、これは単にデータをテーブルに挿入します。

于 2012-07-10T15:33:37.963 に答える
0

countステートメントを使用します。ここで(AおよびB)countが0を返す場合、ペアは存在しません。0(X)以外の数値を返す場合、エントリペアは(X)回存在します。

于 2012-07-10T15:34:22.527 に答える
0

場合によっては、PK で参加する左/右結合を使用できます。

insert into tableA (Id,AnotherId)
select b.Id, b.AnotherId
from tableB b
left join tableA a
    on b.Id = a.id
        and b.AnotherId = a.AnotherId
where a.Id is null

別の左結合バージョン:

insert into tableA (Id,AnotherId)
select b.Id, b.AnotherId
from (select Id = 5, AnotherId = 5) b
left join tableA a
    on b.Id = a.id
        and b.AnotherId = a.AnotherId
where a.Id is null
and a.Id is null
于 2012-07-10T15:55:20.857 に答える