3

SQL Insert into/select に問題があります。

INSERT INTO TBLPMHISTORY(RELEQUIPMENTID,DTETHISPMDUE,STRCAMPUS,STRROOM)
(SELECT INTEQUIPMENTID,DTEPMDATENEXTDUE,STRCAMPUS,STRROOM
FROM TBLEQUIPMENT
WHERE DTEPMDATENEXTDUE BETWEEN GETDATE() AND DATEADD("DAY",21,GETDATE()))

新しいテーブルに 1 行しか挿入されないように見えますが、ステートメントの 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]
4

2 に答える 2

1

おそらく、テーブル TBLPMHISTORY に DTETHISPMDUE can't be null などの制約があり、select にその列の null 値が含まれている可能性があります。正確にその列である必要はありません。宛先テーブルの他の列にすることができます。ソース テーブル内の無効なレコードを確認する必要があります。

于 2013-04-09T04:14:32.913 に答える
0

あなたのインデックスは を使用してIGNORE_DUP_KEY = ONいます。

これは、このインデックスの一意性に違反する挿入された行が無視される、つまり挿入されないことを意味します。

通常、このオプションは に設定しOFFます。

于 2013-04-09T07:24:32.183 に答える