如何在SQL中的行中插入数据?

时间:2016-07-22 10:40:03

标签: sql sql-server database sql-insert identity-insert

我正在阅读一本教程,并从一本书中学习MVC,在那里我被告知使用这个脚本创建一个表,我做了。但现在我想在我的Pet表中添加一整行,但我无法做到。

用于创建所有表格的脚本。

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])
    );

我想在Pet表的第一行添加一些随机值(用于测试)。 这是Pet表格的第一行作为图像以进一步清晰。

enter image description here

我尝试使用此脚本向表中添加值。

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

但是我说错误

  

表格中的标识列的显式值' Pet'只能在使用列列表且IDENTITY_INSERT为ON时指定。

现在我对SQL很新,我无法解决这个问题。我看了其他SO答案,人们对SET IDENTITY_INSERT说了些什么,但这对我也没有用。我相信我误解了其他SO答案,因为我对数据库语言还不熟悉。需要你的帮助。

由于

3 个答案:

答案 0 :(得分:2)

PetID被定义为IDENTITY,因此除非将“IDENTITY_INSERT”选项设置为ON,否则无法在该列中指定INSERT值。

您有两种选择:

  • 不要指定该列/值,让SQL为您生成它。
  • 在INSERT操作之前将IDENTITY_INSERT设置为ON。

答案 1 :(得分:1)

在SQL Server中标识用于自动增量。 identity(1,1)表示列的起始值为1,并将增加1.您可以将其更改为所需的值,例如identity(5,2)将值从5开始,并以2递增。需要指定一个显式值来设置此列,它将自动分配一个唯一值。

在mysql中你可以使用AUTO_INCREMENT

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

答案 2 :(得分:0)

添加行/编辑表(包括编辑删除行)的另一种非常酷的方法是使用Microsoft SQL Management Studio Express。在我学习SQL多年之前,我一直都不知道这一点。基本上将树结构展开到左侧,右键单击表并选择“编辑表”。当你更多地使用SQL时,你可以在这里编辑存储过程以及你可以想到的几乎所有SQL。

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

enter image description here