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