1
DROP TABLE #ABC
CREATE TABLE #ABC (ID INT, Name VARCHAR (2))
INSERT INTO #ABC (ID, NAME)
VALUES (1,'01'),(1,'F5'),(1,'05'),(2,'08'),(2,'G4'),(3,'Y7'),(3,'18')
drop table #XYZ
CREATE TABLE #XYZ (ID INT, Name char(20))
INSERT INTO #XYZ (ID,Name)
SELECT ID, SUBSTRING(REPLACE(CONVERT(VARCHAR(36), NEWID()) , '-', ''), 0, 3) from #ABC
Select * from #XYZ
我希望進程創建一個新的名稱,該名稱已不被相同的ID使用。換句話說,相同的ID(比如ID = 1)不能具有相同的「名稱」列。這只是很少的記錄,但我的真實數據是巨大的,我希望系統只生成表格#XYZ中包含2個字符的新名稱,這些字符在#ABC中已經沒有被相同ID使用。任何幫助表示讚賞。謝謝生成未採用的新ID
它處理了它不會生成#ABC中已存在的ID的部分,但它正在生成重複的新ID。比如說ID = 1,兩次產生'02'和'02'。謝謝! – 2013-05-07 19:03:55
是的,如果您使用NEWID()作爲隨機數生成器,並且生成一大堆隨機數,則會得到重複數據。我的代碼假設您在將它們插入#ABC之前一次檢查它們。我更新了我的答案以添加GROUP BY#DEF.ID,#DEF.Name。你也可以使用DISTINCT。這應該有助於消除重複。 – criticalfix 2013-05-07 19:15:58
漏洞:如果我在表#DEF中使用DISTINCT,那麼如果#ABC中存在相同的名稱,我們就不能獲取所有值。假設ID = 1,我們在#ABC中有50條記錄,有少於50條記錄被插入到#DEF中,因此在#XYZ中。我們需要與#ABC中相同數量的記錄。謝謝 – 2013-05-07 22:13:47