我有以下奇怪的问题:
我需要用伪随机数据填充一些表。在这种情况下,我有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)
并插入数据(使用相同的选择,但仅使用一列),并且它已成功完成。
我确定我是唯一连接到服务器的用户。插入前表格为空。
非常感谢任何提示!