【发布时间】:2013-01-28 09:59:18
【问题描述】:
问题:
在 SQL-Server 中,是否可以将整数(不是 GUID)作为 ID(主键),但 不使用 AutoID/AutoIncrement,这样我可以在以下情况下手动设置 ID我必须这样做,而不会在多线程环境(Web 应用程序)中遇到麻烦?
如果是这样,如果我必须连续插入两行以上,并且没有给出主键,我该如何设计生成插入 ID 的函数,以便它是线程安全的,而我没有为 2+ 插入/记录获取相同的 id ?
【问题讨论】:
-
虽然完全有可能拥有不是身份的 PK,但您已经描述了身份听起来很理想的情况 - 您有不能使用它的原因吗?
-
@Bridge:现在,我需要定期删除并重新导入用户表。如果有人在我删除后插入新用户,它应该分配一个具有下一个最高值的新 id,如果我重新导入旧用户,它应该将相同的 ID 重新分配给同一个用户。现在,我必须关闭/打开身份插入,然后它会在身份插入切换期间中断新用户在 Web 应用程序中的插入。
-
@Quandary - 实际上,您必须打开身份插入 on (设置的意义是“我要插入一个身份值”) - 它只是影响设置选项的连接 - 它不应该影响其他连接,例如网络应用程序。
-
也许您不应该删除用户表,而是在导入过程中更新现有用户。 “插入重复密钥更新”在这里可能会有所帮助。虽然,显然您正在使用两个不同的来源从(导入和直接插入)获取用户信息。如果两者都依赖于“自动编号”ID,则结果将是不可预测的。也许考虑从实际数据(例如“用户名”)构造一个主键
标签: sql multithreading sql-server-2008 tsql sql-server-2005