从一个“非空”列复制到另一个列会产生“无法将空值插入列”。

时间:2013-06-14 15:31:31

标签: sql sql-server sql-server-2005

我正在尝试将所有数据从一个表复制到另一个表,因为第二个表的排序有点不同我使用以下SQL脚本来执行此操作:

USE LoanersTest
DROP TABLE LoanerItems1
CREATE TABLE LoanerItems1
(
LoanerKey INT NOT NULL UNIQUE 
,BCPartNumber VARCHAR(255)  NULL 
,Manufacturer VARCHAR(255)  NULL 
,Model VARCHAR(255)  NULL 
,Modality INT NOT NULL UNIQUE
,Status INT  NOT NULL UNIQUE
,Location INT  NOT NULL UNIQUE
,ShelvingKey INT NOT NULL UNIQUE
,CalDate VARCHAR(255)  NULL 
,CalDue VARCHAR(255)  NULL 
,BCID VARCHAR(255)  NULL 
,SerialNumber VARCHAR(255)  NULL 
,AssetTag VARCHAR(255)  NULL 
,LoanTerm VARCHAR(255)  NULL 
,PartNumber VARCHAR(255)  NULL 
,Notes VARCHAR(255)  NULL 
,CriticalNotes VARCHAR(255)  NULL 
,ShippingNotes VARCHAR(255)  NULL 
,ReceivingNotes VARCHAR(255)  NULL 
,Description VARCHAR(255)  NULL 
,Details VARCHAR(255)  NULL 
,Attachments VARCHAR(255)  NULL 
,Manuals VARCHAR(255)  NULL 
,PRIMARY KEY (LoanerKey) 
)
INSERT INTO LoanerItems1 (LoanerKey)
  SELECT LoanerKey FROM LoanerItems

INSERT INTO LoanerItems1 (BCPartNumber)
  SELECT BCPartNumber FROM LoanerItems

INSERT INTO LoanerItems1 (Manufacturer)
  SELECT Manufacturer FROM LoanerItems

INSERT INTO LoanerItems1 (Model)
  SELECT Model FROM LoanerItems

INSERT INTO LoanerItems1 (Modality)
  SELECT Modality FROM LoanerItems

INSERT INTO LoanerItems1 (Status)
  SELECT Status FROM LoanerItems

INSERT INTO LoanerItems1 (Location)
  SELECT Location FROM LoanerItems

INSERT INTO LoanerItems1 (ShelvingKey)
  SELECT ShelvingKey FROM LoanerItems

INSERT INTO LoanerItems1 (CalDate)
  SELECT CalDate FROM LoanerItems

INSERT INTO LoanerItems1 (CalDue)
  SELECT CalDue FROM LoanerItems

INSERT INTO LoanerItems1 (BCID)
  SELECT BCID FROM LoanerItems

INSERT INTO LoanerItems1 (SerialNumber)
  SELECT SerialNumber FROM LoanerItems

INSERT INTO LoanerItems1 (AssetTag)
  SELECT AssetTag FROM LoanerItems

INSERT INTO LoanerItems1 (LoanTerm)
  SELECT LoanTerm FROM LoanerItems

INSERT INTO LoanerItems1 (PartNumber)
  SELECT PartNumber FROM LoanerItems

INSERT INTO LoanerItems1 (Notes)
  SELECT Notes FROM LoanerItems

INSERT INTO LoanerItems1 (CriticalNotes)
  SELECT CriticalNotes FROM LoanerItems

INSERT INTO LoanerItems1 (ShippingNotes)
  SELECT ShippingNotes FROM LoanerItems

INSERT INTO LoanerItems1 (ReceivingNotes)
  SELECT ReveivingNotes FROM LoanerItems

INSERT INTO LoanerItems1 (Description)
  SELECT Description FROM LoanerItems

INSERT INTO LoanerItems1 (Details)
  SELECT Details FROM LoanerItems

INSERT INTO LoanerItems1 (Attachments)
  SELECT Attachments FROM LoanerItems

INSERT INTO LoanerItems1 (Manuals)
  SELECT Manuals FROM LoanerItems

第一个表的格式完全相同(尽管列的排序方式略有不同)并包含大约80条记录。没有记录包含空值,但执行此语句将返回以下内容:

  

无法将值NULL插入“模态”列,表'LoanersTest.dbo.LoanerItems1';列不允许空值。 INSERT失败。

  

无法将值NULL插入列'LoanerKey',表'LoanersTest.dbo.LoanerItems1';列不允许空值。 INSERT失败。

LoanerKey中的值基本上是1,2,3,4,5 ... 85,86,87。模态列暂时包含相同的值。同样,这两列都不包含空值,但是会返回此错误。

2 个答案:

答案 0 :(得分:5)

不要插入单个列。在一个查询中插入所有列。

INSERT INTO LoanerItems1 (LoanerKey, BCPartNumber, Manufacturer...)
SELECT LoanerKey, BCPartNumber, Manufacturer, ....  FROM LoanerItems

当您只插入一列时,其他列将默认为NULL,这就是您看到错误的原因。

答案 1 :(得分:0)

您需要一次插入所有记录。您的语句正在尝试插入整行,但只设置一列。你想要这个:

insert into LoanerItems1
(LoanerKey
,BCPartNumber
,Manufacturer
,Model
,Modality
,Status
,Location
,ShelvingKey
,CalDate
,CalDue
,BCID
,SerialNumber
,AssetTag
,LoanTerm
,PartNumber
,Notes
,CriticalNotes
,ShippingNotes
,ReceivingNotes
,Description
,Details
,Attachments
,Manuals
,BCPartNumber
,Manufacturer
,Model
,Modality
,Status
,Location
,ShelvingKey
,CalDate
,CalDue
,BCID
,SerialNumber
,AssetTag
,LoanTerm
,PartNumber
,Notes
,CriticalNotes
,ShippingNotes
,ReceivingNotes
,Description
,Details
,Attachments
,Manuals)
SELECT LoanerKey
,BCPartNumber
,Manufacturer
,Model
,Modality
,Status
,Location
,ShelvingKey
,CalDate
,CalDue
,BCID
,SerialNumber
,AssetTag
,LoanTerm
,PartNumber
,Notes
,CriticalNotes
,ShippingNotes
,ReceivingNotes
,Description
,Details
,Attachments
,Manuals
,BCPartNumber
,Manufacturer
,Model
,Modality
,Status
,Location
,ShelvingKey
,CalDate
,CalDue
,BCID
,SerialNumber
,AssetTag
,LoanTerm
,PartNumber
,Notes
,CriticalNotes
,ShippingNotes
,ReceivingNotes
,Description
,Details
,Attachments
,Manuals
from LoanerItems
相关问题