为什么我在尝试向 table 中插入内容时不断收到此错误消息

Why do I keep getting this error message when I try to insert something into a table

这是我必须回答的问题:

  1. 创建一个名为 Products_INSERT 的触发器,如果​​该列的值为 null,则该触发器会为 Products table 的 DateAdded 列插入当前日期。 使用适当的 INSERT 语句测试此触发器。

这是我的代码:

    CREATE TRIGGER Products_INSERT
        ON Products
        AFTER INSERT
    AS
        UPDATE Products
        SET DateAdded = GETDATE()
        WHERE DateAdded IS NULL OR
              DateAdded IN (SELECT DateAdded FROM inserted);

这是我的插入语句:

    INSERT INTO Products
    VALUES (4, 'LK-5300', 'Likeable Keyboard 5300',
    'This keyboard is so cool, you just might flip!',
    699.99, 30.00, NULL)

这是我不断收到的错误:

    Msg 547, Level 16, State 0, Line 1
    The INSERT statement conflicted with the FOREIGN KEY constraint "FK__Products__Catego__145C0A3F". The conflict occurred in database "MyGuitarShop", table "dbo.Categories", column 'CategoryID'.
    The statement has been terminated.

我知道错误与外键有关,但我不完全确定。任何帮助将不胜感激。

编辑:

    CREATE TABLE Products (
      ProductID         INT            PRIMARY KEY   IDENTITY,
      CategoryID        INT            REFERENCES Categories (CategoryID), 
      ProductCode       VARCHAR(10)    NOT NULL      UNIQUE,
      ProductName       VARCHAR(255)   NOT NULL,
      Description       TEXT           NOT NULL,
      ListPrice         MONEY          NOT NULL,
      DiscountPercent   MONEY          NOT NULL      DEFAULT 0.00,
      DateAdded         DATETIME                     DEFAULT NULL
      );

这是产品table

您的 INSERT 应该是:

INSERT INTO Products
  (   CategoryID,
      ProductCode,
      ProductName,
      Description,
      ListPrice,
      DiscountPercent,
      DateAdded
   )   
    VALUES (4, 'LK-5300', 'Likeable Keyboard 5300',
    'This keyboard is so cool, you just might flip!',
    699.99, 30.00, NULL)

您的 INSERT 缺少进入 ProductID 列的值,因为它是自动生成的,因为它被定义为 IDENTITY 但要使其正常工作,您需要命名列,省略ProductID

感谢@Turophile 在阅读您的 post:

后我最终对我的 INSERT 语句做了什么
    INSERT INTO Products (CategoryID, ProductCode, ProductName, Description, ListPrice,DiscountPercent, DateAdded)
    VALUES (44444, 'LK-5300', 'Likeable Keyboard 5300',
    'This keyboard is so cool, you just might flip!',
     699.99, 30.00, NULL)