次の奇妙な問題があります。
テーブルに疑似乱数データを入力する必要があります。この場合、10 個の一意の列があります。このシナリオについては議論しないでください。これはテストのみです。
いくつかのテーブルを取得します-一意の列ごとに1つのテーブル。この各テーブルから、最終テーブルに挿入する必要がある上位 XX 値を個別に選択します。ランダム性要求のため、ROWID() による順序付けを実行し、すべての「列テーブル」を特定のテーブルに挿入される 1 つの選択に結合します。
例:
CREATE TABLE uqtest (col1 INT PRIMARY KEY,
col2 INT UNIQUE,
col3 INT UNIQUE,
col4 INT UNIQUE,...
INSERT INTO [dbo].[uqtest] WITH (TABLOCK)([col1],[col2],[col3],...
SELECT [col1].[col1],[col2].[col2],[col3].[col3],...
FROM
(
SELECT col1,ROW_NUMBER() OVER (ORDER BY NEWID()) AS RID
FROM
(
SELECT DISTINCT TOP 10000 col1 FROM [TEMPGEN_UNIQUE_uqtest_col1] ) AS col1
) AS col1
INNER JOIN
(
SELECT col2,ROW_NUMBER() OVER (ORDER BY NEWID()) AS RID
FROM
(
SELECT DISTINCT TOP 10000 col2 FROM [TEMPGEN_UNIQUE_uqtest_col2] ) AS col2
) AS col2
ON col1.RID = col2.RID
INNER JOIN (
SELECT col3,ROW_NUMBER() OVER (ORDER BY NEWID()) AS RID
FROM
(
SELECT DISTINCT TOP 10000 col3 FROM [TEMPGEN_UNIQUE_uqtest_col3] ) AS col3
) AS col3
ON col2.RID = col3.RID
....
等々。(このスクリプトは生成されます)
次のエラー メッセージが表示されます。
メッセージ 2627、レベル 14、状態 1、行 1
UNIQUE KEY 制約 'UQ_ uqtest _9017EE603E52440B' の違反。オブジェクト 'dbo.uqtest' に重複するキーを挿入できません。
私の場合は ですcol10
。
私が選択しようとしたときcol10
、select distinct col10
結果は同じでした。
別のテスト:
一時テーブルを作成しました
CREATE TABLE test10 (col VARCHAR(255))
このテーブルにデータを挿入し、その単一の列に一意のインデックスを作成しました-すべて問題ありませんでした。
そして私の最後の推測:
uq制約を含むテーブルを作成しました
CREATE TABLE test10 (col VARCHAR(255) UNIQUE)
そしてデータを挿入し(ただし、同じ選択を使用して、1列のみで)、正常に終了しました。
サーバーに接続しているユーザーは私だけだと思います。挿入前のテーブルは空です。
ヒントをありがとう!