2016-11-30 27 views
0

我正在从db kroenke书中做练习。任何人都可以明白为什么这个插入:MSSQL插入不工作

INSERT INTO PRODUCT_SALES VALUES(41197, 3, 'VK001', 1, 14.95, 14.95); 

不会下表上工作:

CREATE TABLE PRODUCT_SALES(
     TimeID   Int     NOT NULL, 
     CustomerID  Int     NOT NULL, 
     ProductNumber Char(35)   NOT NULL, 
     Quantity  Int     NOT NULL, 
     UnitPrice  Numeric(9,2)  NOT NULL, 
     Total   Numeric(9,2)  NULL, 
     CONSTRAINT  SALES_PK 
     PRIMARY KEY  (TimeID, CustomerID, ProductNumber), 
     CONSTRAINT  PS_TIMELINE_FK FOREIGN KEY(TimeID) 
           REFERENCES TIMELINE(TimeID) 
             ON UPDATE NO ACTION 
             ON DELETE NO ACTION, 
     CONSTRAINT  PS_CUSTOMER_FK FOREIGN KEY(CustomerID) 
           REFERENCES CUSTOMER(CustomerID) 
             ON UPDATE NO ACTION 
             ON DELETE NO ACTION, 
     CONSTRAINT  PS_PRODUCT_FK FOREIGN KEY(ProductNumber) 
           REFERENCES PRODUCT(ProductNumber) 
             ON UPDATE NO ACTION 
             ON DELETE NO ACTION 
     ); 

格式看起来不错,但得到这个错误:

Column name or number of supplied values does not match table definition. 

谢谢!

+2

(1)为什么会被称为'ProductNUMBER'列是一个字符串? (2)为什么它是一个'CHAR()'而不是'VARCHAR()'? –

+0

我能够插入(删除所有约束),看起来,你不应该得到错误消息,你越来越 – TheGameiswar

+0

我没有理由'列名或提供的值数量不匹配表定义'检查你的SQL。 – Serg

回答

1

只是在Insert语句中使用了列名并且它已经工作了。

CREATE TABLE TIMELINE (TimeID INT NOT NULL PRIMARY KEY) 
GO 
CREATE TABLE CUSTOMER (CUSTOMERID INT NOT NULL PRIMARY KEY) 
GO 
CREATE TABLE PRODUCT(ProductNumber Char(35) NOT NULL PRIMARY KEY) 
GO 

INSERT INTO TIMELINE VALUES (41197) 
INSERT INTO CUSTOMER VALUES (3) 
INSERT INTO PRODUCT VALUES ('VK001') 
GO 

CREATE TABLE PRODUCT_SALES(
     TimeID   Int     NOT NULL, 
     CustomerID  Int     NOT NULL, 
     ProductNumber Char(35)   NOT NULL, 
     Quantity  Int     NOT NULL, 
     UnitPrice  Numeric(9,2)  NOT NULL, 
     Total   Numeric(9,2)  NULL, 
     CONSTRAINT  SALES_PK 
     PRIMARY KEY  (TimeID, CustomerID, ProductNumber), 
     CONSTRAINT  PS_TIMELINE_FK FOREIGN KEY(TimeID) 
           REFERENCES TIMELINE(TimeID) 
             ON UPDATE NO ACTION 
             ON DELETE NO ACTION, 
     CONSTRAINT  PS_CUSTOMER_FK FOREIGN KEY(CustomerID) 
           REFERENCES CUSTOMER(CustomerID) 
             ON UPDATE NO ACTION 
             ON DELETE NO ACTION, 
     CONSTRAINT  PS_PRODUCT_FK FOREIGN KEY(ProductNumber) 
           REFERENCES PRODUCT(ProductNumber) 
             ON UPDATE NO ACTION 
             ON DELETE NO ACTION 
     ); 
GO 

- 在插入语句中添加了列名,它工作。

INSERT INTO PRODUCT_SALES (TimeID ,CustomerID, ProductNumber , Quantity, UnitPrice , Total) 
VALUES(41197, 3, 'VK001', 1, 14.95, 14.95); 
0

The Query seems to work fine

我尝试了相同的查询在我的MySQL插入查询似乎做工精细!表格被修改了吗?

0

您是否使用不同的列或列顺序创建了此表?

你可以尝试

DROP TABLE PRODUCT_SALES 
CREATE TABLE PRODUCT_SALES(
    TimeID   Int     NOT NULL, 
    CustomerID  Int     NOT NULL, 
    ProductNumber Char(35)   NOT NULL, 
    Quantity  Int     NOT NULL, 
    UnitPrice  Numeric(9,2)  NOT NULL, 
    Total   Numeric(9,2)  NULL, 
    CONSTRAINT  SALES_PK 
    PRIMARY KEY  (TimeID, CustomerID, ProductNumber), 
    CONSTRAINT  PS_TIMELINE_FK FOREIGN KEY(TimeID) 
          REFERENCES TIMELINE(TimeID) 
            ON UPDATE NO ACTION 
            ON DELETE NO ACTION, 
    CONSTRAINT  PS_CUSTOMER_FK FOREIGN KEY(CustomerID) 
          REFERENCES CUSTOMER(CustomerID) 
            ON UPDATE NO ACTION 
            ON DELETE NO ACTION, 
    CONSTRAINT  PS_PRODUCT_FK FOREIGN KEY(ProductNumber) 
          REFERENCES PRODUCT(ProductNumber) 
            ON UPDATE NO ACTION 
            ON DELETE NO ACTION 
    ); 

INSERT INTO PRODUCT_SALES (TimeID,CustomerID,ProductNumber,Quantity,UnitPrice,Total) 
VALUES(41197, 3, 'VK001', 1, 14.95, 14.95);