SQL Server:具有select distinct的唯一键冲突

时间:2013-04-15 10:50:20

标签: sql-server select insert unique distinct

我有以下奇怪的问题:

我需要用伪随机数据填充一些表。在这种情况下,我有10个独特的列。请不要讨论这个场景,它只是测试。

我得到了一些表 - 每个唯一列一个表。从每个表中我选择了我需要插入到最终表的不同顶部XX值。由于随机性请求,我通过ROWID()执行排序,并将所有“列表”连接到一个插入到给定表中的选择中。

示例:

 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

...

等等。 (生成此脚本)

我收到以下错误消息:

  

Msg 2627,Level 14,State 1,Line 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)

并插入数据(使用相同的选择,但仅使用一列),并且它已成功完成。

我确定我是唯一连接到服务器的用户。插入前表格为空。

非常感谢任何提示!

0 个答案:

没有答案