如何将数据插入 SQL 中的一行?

How do I insert data into a row in SQL?

我正在学习教程并从一本书中学习 MVC,书中告诉我使用此脚本创建 table,我照做了。但是现在我想为我的宠物添加一整行table,但我做不到。

用于创建我所有 table 的脚本。

CREATE TABLE [dbo].[Setting] (
    [Id] INT NOT NULL IDENTITY(1, 1)
    ,[Key] VARCHAR(50) NOT NULL
    ,[Value] VARCHAR(500) NULL
    ,CONSTRAINT [PK_Setting] PRIMARY KEY ([Id])
    );

CREATE TABLE [dbo].[PetType] (
    [PetTypeID] INT NOT NULL IDENTITY(1, 1)
    ,[PetTypeDescription] VARCHAR(50) NULL
    ,CONSTRAINT [PK_PetType] PRIMARY KEY ([PetTypeID])
    );

CREATE TABLE [dbo].[Status] (
    [StatusID] INT NOT NULL IDENTITY(1, 1)
    ,[Description] VARCHAR(50) NOT NULL
    ,CONSTRAINT [PK_Status] PRIMARY KEY ([StatusID])
    );

CREATE TABLE [dbo].[Pet] (
    [PetID] INT NOT NULL IDENTITY(1, 1)
    ,[PetName] VARCHAR(100) NOT NULL
    ,[PetAgeYears] INT NULL
    ,[PetAgeMonths] INT NULL
    ,[StatusID] INT NOT NULL
    ,[LastSeenOn] DATE NULL
    ,[LastSeenWhere] VARCHAR(500) NULL
    ,[Notes] VARCHAR(1500) NULL
    ,[UserId] INT NOT NULL
    ,CONSTRAINT [PK_Pet] PRIMARY KEY ([PetID])
    ,CONSTRAINT [FK_Pet_Status] FOREIGN KEY ([StatusID]) REFERENCES [Status]([StatusID])
    ,CONSTRAINT [FK_Pet_User] FOREIGN KEY ([UserId]) REFERENCES [UserProfile]([UserId])
    );

CREATE TABLE [dbo].[PetPhoto] (
    [PhotoID] INT NOT NULL IDENTITY(1, 1)
    ,[PetID] INT NOT NULL
    ,[Photo] VARCHAR(500) NOT NULL CONSTRAINT [DF_PhotoFile] DEFAULT '/content/pets/no-image.png'
    ,[Notes] VARCHAR(500) NULL
    ,CONSTRAINT [PK_PetPhoto] PRIMARY KEY ([PhotoID])
    ,CONSTRAINT [FK_PetPhoto_Pet] FOREIGN KEY ([PetID]) REFERENCES [Pet]([PetID])
    );

CREATE TABLE [dbo].[Message] (
    [MessageID] INT NOT NULL
    ,[UserId] INT NOT NULL
    ,[MessageDate] DATETIME NOT NULL
    ,[From] VARCHAR(150) NOT NULL
    ,[Email] VARCHAR(150) NOT NULL
    ,[Subject] VARCHAR(150) NULL
    ,[Message] VARCHAR(1500) NOT NULL
    ,CONSTRAINT [PK_Message] PRIMARY KEY ([MessageID])
    ,CONSTRAINT [FK_Message_User] FOREIGN KEY ([UserId]) REFERENCES [UserProfile]([UserId])
    );

我想在我的宠物 table 的第一行中添加一些随机值(用于测试)。 这是宠物 table 的第一行图片,为进一步清晰起见。

我尝试使用此脚本为我的 table 添加值。

INSERT INTO Pet VALUES ('1', 'Fido', '12', '4', '1', '12/07/2004', 'New York', 'nothing', '1')

但是我收到一条错误消息

An explicit value for the identity column in table 'Pet' can only be specified when a column list is used and IDENTITY_INSERT is ON.

现在我是 SQL 的新手,我无法理解这一点。我查看了其他 SO 答案,其中人们说了一些关于 SET IDENTITY_INSERT 的内容,但这对我也不起作用。我相信我误解了其他 SO 答案,因为我对数据库语言还很陌生。所以需要你的帮助。

谢谢

PetID 被定义为 IDENTITY,因此您不能指定要在该列中插入的值,除非您将 "IDENTITY_INSERT" 选项设置为 ON。

您有两个选择:

  • 不要指定 column/value,让 SQL 为您生成。
  • 在您的 INSERT 操作之前将 IDENTITY_INSERT 设置为 ON。

在SQL服务器identity用于autoincrement。 identity(1,1) 表示该列的起始值为 1 并将递增 1。您可以将其更改为所需值,例如 identity(5,2) 的起始值为 5 并递增 2。您没有需要为设置此列指定一个显式值,它将自动分配一个唯一值。

在mysql中你可以使用AUTO_INCREMENT

有关详细信息,请参阅 w3schools 页面 sql autoincrement

添加 rows/edit table(包括编辑删除行)的另一种非常酷的方法是使用 Microsoft SQL Management Studio Express。直到我学习 SQL 多年后,我才知道这一点。基本上向左展开树结构,右键单击 table 并选择编辑 Table。当您开始使用 SQL 更多内容时,您可以在此处编辑存储过程以及几乎任何您能想到的 SQL 其他内容。

我模糊了实际的数据库名称,但这给了你它的要点:-