0

次の奇妙な問題があります。

テーブルに疑似乱数データを入力する必要があります。この場合、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

私が選択しようとしたときcol10select distinct col10結果は同じでした。

別のテスト:

一時テーブルを作成しました

   CREATE TABLE test10 (col VARCHAR(255))

このテーブルにデータを挿入し、その単一の列に一意のインデックスを作成しました-すべて問題ありませんでした。

そして私の最後の推測:

uq制約を含むテーブルを作成しました

 CREATE TABLE test10 (col VARCHAR(255) UNIQUE)

そしてデータを挿入し(ただし、同じ選択を使用して、1列のみで)、正常に終了しました。

サーバーに接続しているユーザーは私だけだと思います。挿入前のテーブルは空です。

ヒントをありがとう!

4

0 に答える 0