簡體   English   中英

違反主鍵約束查詢

[英]Violation of Primary Key Constraint Query

我想知道是否有人可以通過下面的SQL代碼來幫助我。 我試圖將BC_completions表中的所有記錄插入到我的地理數據表中。 如果在插入項中排除ID列,則會得到“消息515 ...無法將值NULL插入列” ID”。 但是,如果按如下所示包含它,則會收到“ Msg ... Violation of PRIMARY KEY約束”。

更令人困惑的是,如果我手動輸入從@PK獲得的值,數據庫會接受它,因此這里的任何幫助都會很棒。

謝謝

DECLARE @PK AS INT
DECLARE @COUNT AS INT
DECLARE @RECORDCOUNT AS INT

SET @PK = 
(SELECT TOP 1 ID FROM PRCORE.DBO.GEODATA
ORDER BY ID DESC)


SET @RECORDCOUNT =
(SELECT  COUNT(*) FROM BC_COMPLETIONS)


SET @COUNT = 0

WHILE @COUNT < @RECORDCOUNT  
BEGIN
SET @PK = @PK+1
SET @COUNT = @COUNT+1

INSERT INTO PRCORE.DBO.GEODATA     
(ID,RecordType,ReferenceName,LocationDescription,Description,ORN,StartDate,ChgText)
SELECT @PK,189,REFVAL,ADDRESS,DSCRPN,ORN,RECPTD,AGTNAME
FROM BC_COMPLETIONS B

where @PK not in (select ID from prcore.dbo.geodata)

END   

這是循環和插入語句的WHERE約束問題。 您正在從BC_COMPLETIONS中選擇所有記錄,並將它們分配給相同的PK。

而是使用ROW_NUMBER()函數來分配您的PK,這將使您一次完成所有操作,而不是一次執行一個記錄:

DECLARE @PK AS INT
DECLARE @RECORDCOUNT AS INT

SET @PK = (SELECT TOP 1 ID FROM PRCORE.DBO.GEODATA ORDER BY ID DESC) + 1

SET @RECORDCOUNT = (SELECT  COUNT(*) FROM BC_COMPLETIONS)

INSERT INTO PRCORE.DBO.GEODATA (ID,RecordType,ReferenceName,LocationDescription,Description,ORN,StartDate,ChgText)
SELECT ROW_NUMBER() OVER(ORDER BY REFVAL) + @PK ,189,REFVAL,ADDRESS,DSCRPN,ORN,RECPTD,AGTNAME
FROM BC_COMPLETIONS B

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM