【问题标题】:How do I insert data into a row in SQL?如何在 SQL 中将数据插入一行?
【发布时间】:2016-07-22 10:40:02
【问题描述】:

我正在学习一个教程并从一本书中学习 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 表的第一行。

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

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

但我收到一个错误提示

只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表“Pet”中的标识列指定显式值。

现在我对 SQL 相当陌生,我无法弄清楚这一点。我查看了其他 SO 答案,人们对SET IDENTITY_INSERT 说了些什么,但这对我也不起作用。我相信我误解了其他 SO 答案,因为我对数据库语言相当陌生。所以需要你的帮助。

谢谢

【问题讨论】:

  • [PetID] 列是 identity 列。而且您还试图将数据插入该列。只需将其删除。
  • 你不需要在身份列中插入数据
  • 哦,我明白了。这就说得通了。所以我在我的 INSERT 语句中删除了 1 的值,我得到了另一个错误。 “INSERT 语句与 FOREIGN KEY 约束“FK_Pet_Status”冲突。冲突发生在数据库“aspnet-HaveYouSeenMe-20160720053115”、表“dbo.Status”、列“StatusID”中。该语句已终止。”
  • 如果您正在学习教程,那么我建议您按顺序执行这些步骤...

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


【解决方案1】:

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

你有两个选择:

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

【讨论】:

    【解决方案2】:

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

    在mysql中你可以使用AUTO_INCREMENT

    详情请参考 w3schools 页面sql autoincrement

    【讨论】:

      【解决方案3】:

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

      我已经模糊了实际的数据库名称,但这为您提供了它的要点:-

      【讨论】:

      • 感谢您的回答,但我在我的项目中使用了 Visual Studio,并试图通过单击任意位置来查看是否可以这样做,但在 Visual Studio 中找不到类似的内容。我最初想在 SQL Server Management Studio 本身中完成与 SQL 相关的所有工作,但安装时遇到了麻烦,所以我继续使用 Visual Studio 中的内容。
      • 我个人发现,除非您每天都插入行,否则我每次都必须查找 sql 命令。但我发现学习 UPDATE 命令更令人难忘。除非您返回备份,否则无法撤消 UPDATE,因此还要了解 BEGIN ROLLBACK,以便在提交 UPDATE 之前了解您将影响多少行。
      猜你喜欢
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多