3

我的 SQL 插入/选择有问题。

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]
4

2 回答 2

1

可能您的表 TBLPMHISTORY 中有约束,例如 DTETHISPMDUE 不能为空,并且选择可能包含该列的空值。它不必完全是该列,它可以是目标表中的任何其他列。您应该检查源表中的无效记录。

于 2013-04-09T04:14:32.913 回答
0

您的索引正在使用IGNORE_DUP_KEY = ON.

这意味着违反该索引唯一性的插入行将被忽略,即不插入。

通常,您会将此选项设置为OFF.

于 2013-04-09T07:24:32.183 回答