【问题标题】:SQL Identity Insert is not creating Identity columnsSQL 身份插入未创建身份列
【发布时间】:2020-02-12 23:03:24
【问题描述】:

我正在将数据导入一个空白数据库,但由于某种原因它没有创建身份列。

我已选择“启用身份插入”

但它没有创建标识列。 这是原版:

id 是一个标识列,但是在导入的表中:

尚未创建标识列。 有谁知道为什么?

【问题讨论】:

  • Identity Insert 并不意味着当你INSERT 时“创建一个身份”,它意味着在执行INSERT 时在桌子上启用IDENTITY_INSERT。如果您的桌子上没有IDENTITY,那么该设置没有任何意义。通常,您不能将值插入到具有IDENTITY 属性的列中。但是,在桌面上启用 IDENTITY_INSERT 允许您这样做。
  • 小钥匙图标(从您的图片中唯一可见的区别)表示“主键”。这与“身份”列不同。它们是两个独立的概念(尽管经常结合使用)。您可能想澄清您对 SQL Server 术语和概念的理解,以便更清楚地了解正在发生的事情以及您的选择意味着什么。附:一个示例 CREATE TABLE 语句实际上对我们来说比来自 SSMS 的图片更清晰。 SSMS 可以为您生成报表。然后我们就可以准确地知道两个数据库中的表是如何设置的
  • 好的,图片可能有误,但数据还是一样的。我将编辑帖子并放置更好的图像

标签: sql-server data-import sql-import-wizard


【解决方案1】:

我想通了。它右键单击原始数据库并单击“任务>生成脚本”到一个新的查询窗口。然后我在目标数据库上使用 Object Explorer (F7) 并删除了所有表。我确保我在上一步中创建的脚本针对的是新数据库,然后我运行了它们。

完成后,我可以使用导入向导并选中“启用身份插入”。

这行得通。

【讨论】:

  • 好计划,我忘了这是一个空白数据库,所以用身份插入再次生成它没有害处:)
【解决方案2】:

简单。右键单击表,然后转到 SSMS 中的设计,突出显示主键。

检查身份规范是否具有以下值。

  • 身份规范 = 是
  • (是身份)= 是
  • 标识增量 = 1
  • 身份种子 = 1

【讨论】:

  • 听起来不错,有 300 多张桌子。我真的不想这样做
【解决方案3】:

可能有帮助

create table YourTableName
(
ID int identity(1,1),
contact_ID int,
ipaddress varchar (50),
task varchar (50)
)

如果你想在标识列中插入值,你需要编写类似这样的示例:

SET IDENTITY_INSERT YourTableName ON

INSERT into YourTableName(TheIdentity, TheValue)
VALUES (1, 'First Row')

SET IDENTITY_INSERT YourTableName OFF

正如你所说,你有 300 多张桌子

转到您的列属性:

在身份规范部分将 IsIdentity No 更改为 Yes (默认情况下,身份规范将从 NO 更改为 Yes) 身份增量 1

【讨论】:

  • 这样不行,有300+张桌子
猜你喜欢
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 2016-07-31
  • 2011-06-09
  • 1970-01-01
  • 2014-03-11
相关资源
最近更新 更多