为什么这个插入查询会出错?

时间:2014-02-19 16:52:21

标签: sql sql-server rdbms database

我是Microsoft SQL Server的新手,我对这个INSERT查询有一个问题,即在一个非常大的表中插入一条新记录(它有很多列)。

我有这个问题:

INSERT INTO VulnerabilityAlertDocument ([Id], 
                    [VulnerabilityAlertId], 
                    [SourceId], 
                    [BugTraqID], 
                    [Title], 
                    [StatusID], 
                    [CVE], 
                    [Published], 
                    [LastUpdated], 
                    [Remote],
                    [Local],
                    [Credibility],
                    [Classification],
                    [Availability], 
                    [Ease],
                    [Authentication], 
                    [CVSS2_BaseScore], 
                    [CVSS2_TemporalScore], 
                    [CVSS2_BaseVector], 
                    [CVSS2_TemporalVector], 
                    [CVSS1_BaseScore], 
                    [CVSS1_TemporalScore], 
                    [NVD_CVSS2_BaseScore], 
                    [NVD_CVSS2_ComponentString], 
                    [ImpactRating], 
                    [Severity], 
                    [EaseofExploit], 
                    [UrgencyRating], 
                    [LastChange], 
                    [ShortSummary], 
                    [Impact], 
                    [TechnicalDescription], 
                    [AttackScenario], 
                    [Exploit], 
                    [Credit], 
                    [URL], 
                    [AlertStatusId], 
                    [Type], 
                    [DetailLevel], 
                    [Language], 
                    [dd])
VALUES('10000', 
       '10000', 
       'TEST', 
       '5',
       'TEST TITLE',
       '1',
       'TEST CVE',
       '1998-04-30 00:00:00.000',
       '2007-11-05 16:32:34.000',
       'TEST REMOTE',
       'TEST LOCAL',
       'TEST CREDIBILITY',
       'TEST CLASSIFICATION',
       'TEST Availability',
       'TEST EASE',
       'TEST Authentication',
       'TEST CVSS2_BaseScore',
       'TEST VSS2_TemporalScore',
       'TEST CVSS2_BaseVector',
       'TEST VSS2_TemporalVector',
       'TEST CVSS1_BaseScore',
       'TEST CVSS1_TemporalScore',
       'TEST NVD_CVSS2_BaseScore',
       'TEST NVD_CVSS2_ComponentString',
       '2',
       '3',
       '10',
       '7',
       'TEST LastChange',
       'TEST ShortSummary',
       'TEST IMPACT',
       'TEST TechnicalDescription',
       'TEST AttackScenario',
       'TEST Exploit',
       'TEST Credit',
       'TEST URL',
       '5',
       '3',
       '1',
       'TEST Language',
       'NULL');

我在其中将特定值插入指定列(我通过第一个查询部分指定列,并通过查询的第二部分指定相关值)

问题是,当我尝试执行上一个查询时,我获得了以下错误

  

Msg 544,Level 16,State 1,Line 1
  无法在表'VulnerabilityAlertDocument'中为identity列插入显式值   IDENTITY_INSERT设置为OFF。

为什么呢?这是什么意思?如何更改查询以解决此问题,并将记录插入表中?

5 个答案:

答案 0 :(得分:1)

SET IDENTITY_INSERT VulnerabilityAlertDocument ON

之前尝试INSERT

INSERT之后,添加SET IDENTITY_INSERT VulnerabilityAlertDocument OFF

答案 1 :(得分:1)

您有一个标识列,那么您不必插入ID,您必须从查询中删除Id以及Id的值

答案 2 :(得分:1)

从列列表中删除[Id]列及其对应的值“10000”。该错误是由于您尝试使用值填充列,并且SQL正在抱怨他可以提供的自动处理值。 顺便说一句,如果这些列是数字类型,则不需要引用数值。

答案 3 :(得分:0)

在查询之前使用SET IDENTITY_INSERT ON。 标识列自动增加,因此不允许插入。 您需要明确声明要将数据插入列中,以便SQL服务器允许它。

确保不为此列插入重复值。

最佳做法是避免将值插入IDENTITY列。

答案 4 :(得分:0)

删除“[ID]”

这样写:

INSERT INTO your table name

例如: 如果您有具有属性ID,name和dept_name的Instructor表 使用:插入命令如bellow

Insert Into Instructor (ID, name, dept_name) Values (11111, 'Andrea', 'Biology');

试试这个让我告诉你结果!!