使用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