我有一个脚本在执行时会出错:
Msg 1505, Level 16, State 1, Server CBR07I300FVA1, Line 1
CREATE UNIQUE INDEX terminated because a duplicate key was found for
index ID 17. Most significant primary key is '44'.
The statement has been terminated.
该脚本包含数千行查询,因此我不知道脚本中的错误来自何处。有没有办法知道“索引ID 17”代表什么?
答案 0 :(得分:1)
在脚本中的每个重要步骤(例如print
)之前插入create unique index
语句,您就完成了。
通常这样做:
if @@error <> 0
PRINT '@@error is ' + ltrim(str(@@error)) + '.'
else
print 'Index IX_... successfully created'
答案 1 :(得分:1)
你说一个有数千行的剧本,嗯?
我的建议:在中间放一个print("Test")
,看看错误发生在之前或之后。然后再次在中间等等,直到找到导致你麻烦的地方。
答案 2 :(得分:0)
您正在处理的表已包含数据;并且数据在您的新索引方面并不是唯一的。
示例:
col1 | col2 | col3
====================
foo | 1 | q
bar | 2 | w
bar | 3 | e
bar | 2 | r
在上表中,您无法在(col1,col2)
上创建唯一索引,因为其中的数据将是非唯一的(多行(bar,2)
)。脚本无法知道实际需要哪些“重复”行。它有三种选择:
运行查询以查找重复项 - 如果按行索引使用的列对行进行分组,则某些组将具有多行。那些是你的重复;你需要以某种方式消除他们的两面性。
答案 3 :(得分:0)
如果您在SSMS中运行此脚本,只需双击该错误,它将转到导致错误的代码行...