使用SQL Server 2008,有三个表,表a,表b和表c。TSQL:获取下一个可用ID
所有具有ID
列,但对表a和b的ID
列是identity integer
,对于表C ID
列是varchar
型
目前存储过程采取的名称PARAM,以下某些逻辑,插入到表格a或表格b中,获得标识,以'A'或'B'作为前缀,然后插入到表格c中。
问题是,表C ID
列可能具有重复值,即如果来自表A的标识为2,表C的ID
列中可能已经有'A2','A3','A5'编写T-SQL查询以确定表C中的下一个可用值,然后确保相应地更新表A/B?
[更新] 这是当前步骤, 1.取决于输入参数,插入到表A或表B中 2.初始化种子值= @@身份 3.计算ID值插入到表C中通过前缀'A'或将种子值追加'B' 4.通过步骤3的ID值查找表C中的记录匹配,如果未找到任何记录,则插入它,否则将种子值增加1,然后重复步骤3
问题出现在某个值范围内,表C ID中可能存在一个巨大的值块,即现在在表C ID中存在A3000到A500000,如果遵循现有的数据库,数据库查询会非常慢逻辑。需要找出一个逻辑巧妙地获得最小可用数量(没有前缀)
这很难描述,希望这更有意义,我真的很感谢任何帮助提前在此谢谢!
重新设计这将会好得多。这真的不是一个好方法 – RBarryYoung 2013-04-11 20:33:28
如果表A和B中的“ID”确实是“INT IDENTITY” - 它怎么会给你重复?如果你在表C中使用表前缀(A或B)加上表A或B中'ID'列的** unique **值,那么对我来说这似乎是不可能的。 – 2013-04-11 20:35:27
@Tommy Wang,你能编辑你的文章并给我们一个更详细的例子吗? – PowerUser 2013-04-11 21:00:10