내 SQL Insert/select에 문제가 있습니다.INSERT INTO/SELECT ONLY ONEOW 행 선택
INSERT INTO TBLPMHISTORY(RELEQUIPMENTID,DTETHISPMDUE,STRCAMPUS,STRROOM)
(SELECT INTEQUIPMENTID,DTEPMDATENEXTDUE,STRCAMPUS,STRROOM
FROM TBLEQUIPMENT
WHERE DTEPMDATENEXTDUE BETWEEN GETDATE() AND DATEADD("DAY",21,GETDATE()))
단지 새 테이블에 한 행을 삽입 할 것 같다,하지만 난 그 자체 명령문의 SELECT 부분을 실행할 때, 그것은 다시 84 개 행이 제공됩니다.
일괄 삽입을 제한하고있는 항목이 있는지는 잘 모르지만 도움이된다면 많은 도움이 될 것입니다.
코드
다음과 같이 PMHISTORY 테이블이 만들려면 다음CREATE TABLE TBLPMHISTORY(
INTPMHISTORYID INT NOT NULL PRIMARY KEY IDENTITY,
RELEQUIPMENTID INT NOT NULL FOREIGN KEY REFERENCES TBLEQUIPMENT(INTEQUIPMENTID),
STRDESCRIPTION VARCHAR(64) DEFAULT 'Preventative Maintenance',
DTETHISPMDUE DATETIME,
YSNPMDONE BIT DEFAULT '0',
YSNPMCONVERTEDTOJOB BIT DEFAULT '0',
INTRELATEDJOBNUMBER INT DEFAULT '0',
STRCAMPUS VARCHAR(30),
STRROOM VARCHAR(30))
CREATE UNIQUE NONCLUSTERED INDEX [IX_PMHistory_DTETHISPMDUE] ON TBLPMHISTORY(DTETHISPMDUE) WITH (IGNORE_DUP_KEY = ON) ON [PRIMARY]
오류가 다시 발생하지 않습니까? 'TBLPMHISTORY'에서 가능한 중복 값을 방지하는 고유 한 제약 조건이나 키가 있습니까? –
방아쇠가 작동하고 있습니까? –
재생할 트리거가 없습니다. 위의 PMHistory 테이블을 만드는 데 사용한 코드를 넣었습니다. 그것은 중복을 방지하기 위해 고유 한 비 클러스터형 인덱스를 가지고 있습니다. 아 ... 모든 제약 조건이 동일한 PMDUEDATE를 가지고 있기 때문에 문제가 있습니다 .... 클러스터되지 않은 인덱스를 사용하여 두 필드에 제약 조건을 둘 수 있습니까? –