我想要完成的是將5位數字分配給表中的一行,並將該值與列值一起插入到不同的表中。用隨機生成的數字插入語句
例如,該查詢返回的一切,我想分配一個5位隨機ID行:
SELECT DISTINCT(ExternalAgentId) FROM lOGS_V WHERE EXTERNALAGENTID <> ''
目前它返回4600
行。注* ExternalAgentID
是varchar(50)
我需要做的是分配一個隨機的5位數字在10001
和39999
之間。一旦我生成的數字插入到表ExternalAgentId
從前一個查詢到另一個表。
這是我採取的方法:
DECLARE @randAgentID int;
DECLARE @AgentID int;
DECLARE @MIN INT;
DECLARE @MAX INT;
SET @MIN = 10001
SET @MAX = 39999
SELECT @randAgentID = ROUND(((@MAX - @MIN -1) * RAND() + @MIN), 0)
SELECT @AgentID = InternalAgentID FROM VendorAgentIDs where InternalAgentID = @randAgentID
IF @AgentID is null
BEGIN
INSERT INTO VendorAgentIDs (VendorID, TRIAgentID) values (SELECT DISTINCT(ExternalAgentId) FROM LOGS_V WHERE EXTERNALAGENTID <> '', @randAgentID)
END
ELSE
BEGIN
SELECT @randAgentID = ROUND(((@MAX - @MIN -1) * RAND() + @MIN), 0)
INSERT INTO VendorAgentIDs (VendorID, TRIAgentID) values (SELECT DISTINCT(ExternalAgentId) FROM LOGS_V WHERE EXTERNALAGENTID <> '', @randAgentID)
END
它的正確生成隨機5位數字。不過,我有兩個問題:
我在
insert
語句syntax error
。...值(SELECT DISTINCT(ExternalAgentId)...
如果存在於表中的
randAgentID
,它進入了ELSE
聲明。我知道機會是低,但什麼如果未來randAgentID
表中也存在?如何防止?
表VendorAgentIDs
有three
列。
- ID(自動增量)
- 廠商ID(VARCHAR(50))
- InternalAgentID(PK,INT)
我如何能解決以上兩個問題有什麼建議?
感謝
* UPDATE
基礎上的建議,我編輯我的代碼。但是,我現在有一個violation of PRIMARY KEY
。 PRIMARY KEY約束 'PK_VendorAgentIDs' 的
DECLARE @randAgentID int;
DECLARE @AgentID int;
DECLARE @MIN INT;
DECLARE @MAX INT;
SET @MIN = 10001
SET @MAX = 39999
SET @AgentID = 1
WHILE @AgentID IS NOT NULL
BEGIN
SET @AgentID = NULL
SELECT @randAgentID = ROUND(((@MAX - @MIN -1) * RAND() + @MIN), 0)
INSERT INTO VendorAgentIDs (VendorAgentID, InternalAgentID) SELECT DISTINCT(ExternalAgentId), @randAgentID FROM LOGS_V WHERE EXTERNALAGENTID <> ''
SELECT @AgentID = InternalAgentID FROM VendorAgentIDs where InternalAgentID = @randAgentID
END
衝突。無法在對象'dbo.VendorAgentIDs'中插入重複鍵。
。你可以改爲'INSERT..FROM'。你應該閱讀關於'INSERT'的相關MSDN文章。 – Yuck 2014-10-27 21:54:18