0

我有以下奇怪的问题:

我需要用伪随机数据填充一些表格。在这种情况下,我有 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

……

等等。(生成此脚本)

我收到以下错误消息:

消息 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)

和插入的数据(使用相同的选择,但是,只有一列),它成功地完成了。

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

非常感谢任何提示!

4

0 回答 0