【发布时间】:2013-11-06 20:31:49
【问题描述】:
我正在创建唯一的客户 ID,这是供外部使用的替代 ID。
在为我的唯一 ID 添加数据类型为 INT 的新列“cust_uid”的过程中,
当我在这个新列中插入时:
Insert Into Customers(cust_uid)
Select ABS(CHECKSUM(NEWID()))
我收到一个错误:
无法创建可接受的游标。链接服务器“SHQ2IIS1”的 OLE DB 提供程序“SQLNCLI”返回消息“多步 OLE DB 操作产生错误。检查每个 OLE DB 状态值(如果可用)。没有完成任何工作。
我检查了两个表上的所有数据类型,唯一改变的是两个表中的新列。
更新是在一张 @$$ 大桌子上完成的...由于我的工资等级以上的原因,我们希望有新的 uid,与我们目前拥有的不同,“所以用户不知道我们实际上有多少个账户。”
- INT 是
ABS(CHECKSUM(NEWID()))的正确数据类型吗?
【问题讨论】:
-
根据文档校验和返回 int。但是为什么要使用它来创建唯一的客户 ID?
-
我们已经为客户准备了 Uid ......这仅供外部使用。仅供参考,插入也在运行 MS-SQL Server 2000 的旧服务器上完成,运行版本 8.00.2039
-
再说一遍,为什么要使用它来创建唯一 ID?当然,发生碰撞的可能性很低,但您的 ID 也很长。为什么不只是 1 - X(一个标识列)。
-
这行不通。散列向导会产生冲突。他们的号码取决于客户的号码,但你不能称它为安全的任何值。这就是为什么你有 128 位 GUID,然后你有 32 位哈希值。
-
假设您不关心重复的可能性,错误消息似乎与数据类型无关。出于好奇,您能否尝试使用
ABS(CHECKSUM(NEWID()))的结果填充INT变量并将其用于插入以查看会发生什么?
标签: sql sql-server tsql