2016-11-30 67 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);