【问题标题】:The identity column must be of data type int, bigint, smallint, tinyint, decimal, or numeric with a scale of 0, and the column must not be nullable标识列的数据类型必须为 int、bigint、smallint、tinyint、decimal 或小数位数为 0 的数字,并且该列不能为空
【发布时间】:2015-11-10 15:38:21
【问题描述】:

将 Visual Studio 2012 (VS2012) 与 SQL Server Data Tools (SSDT) 一起使用 在将数据库项目附加到 StarTeam 2009 R2 后,我收到此错误(我之前在没有源代码控制的情况下使用此项目)。 VS2012 的 StarTeam 2009 R2 集成客户端已安装数周,但自从将解决方案放在源代码管理服务器上后,Visual Studio 的性能已严重降低(等待 20-40 秒以弹出上下文菜单),现在出现此错误对我来说毫无意义。

SQL71518: The identity column '[Domain\Login].[temp#].[Id]' must be of data type int,
bigint, smallint, tinyint, decimal, or numeric with a scale of 0, and the column must
not be nullable.

据我所知,这段代码在语法上没有任何问题 - 尽管我可能同意许多其他问题...

CREATE TABLE [Domain\Login].[temp#]
(
    [Code]        VARCHAR (20)  NOT NULL,
    [Description] VARCHAR (255) NOT NULL,
    [Id]          INT           IDENTITY(1, 1)  NOT NULL
)

知道为什么[Id] 列被标记为错误 SQL71518?该列的数据类型为int,且不可为空,符合报错信息中的要求。

此代码是从停止支持其产品的外部供应商那里继承而来的。由于该产品对我的公司很重要,因此他们安排获取源代码,以便我们自己支持。我对这个特定项目相对较新,整个团队都知道它有严重的缺陷;但是我们还没有收到升级代码和修复所有设计问题所需的预算 - 只是执行一些“小”修改,这应该与上述错误无关。因此,我会忽略此错误,但它会干扰 VS2012 数据库架构比较实用程序。

编辑 1

VS 2012 的 SSDT 已经在 11.1.50730.0

SQL Server Data Tools   11.1.50730.0
Microsoft SQL Server Data Tools

【问题讨论】:

  • 我刚刚在测试系统上创建了该架构,您提供的用于创建表的代码可以正常工作。
  • 同意发布的代码不会产生发布的错误。该错误必须是由问题中未提及的其他原因引起的。或者错误在于 StarTeam,不管是什么。听起来像是第三方客户端,在这种情况下,这不是编程问题。
  • @MitchWheat - 模式名称被混淆以隐藏有罪者的身份。但原件就是这种格式。
  • @SeanLange - 我同意你的评估。就个人而言,我认为该表是由使用应用程序的资源帐户登录的人错误地创建的,并且只是与其余代码一起携带......不幸的是,我需要很长时间来验证这个猜测并获得批准放弃它。 :(
  • @Zarepheth 是的,SourceSafe 更糟糕!光是提到它就让我不寒而栗。

标签: sql-server visual-studio-2012 sql-server-data-tools


【解决方案1】:

该表只有一条记录,因此我通过 SQL Server Management Studio (SSMS) 修改了表设计,使标识列成为列表中的第一列。使用 SSMS,表的数据在修改过程中被保留。我不确定 Visual Studio 是否会保留该表 - 特别是因为架构比较实用程序因错误而无法使用。

CREATE TABLE [Domain\Login].[temp#] (
    [commodity_id] INT           IDENTITY (1, 1) NOT NULL,
    [code]         VARCHAR (20)  NOT NULL,
    [name]         VARCHAR (255) NOT NULL
);

无论 Visual Studio 2012 和 SSDT 发生了什么,这似乎已经纠正了错误——至少现在是这样。

【讨论】:

    【解决方案2】:

    Visual Studio 2012 附带的 SSDT 版本已经过时了,也许这就是它适用于其他所有人的原因?

    获取更新版本的 SSDT(2013 或 2015),它应该可以工作 - 您无需支付许可证即可获得 Visual Studio Express 或社区随附的许可证。

    编辑

    【讨论】:

    • 在大公司工作就是这样,员工并不总是能够完全控制他们对工具的选择。目前,VS 2012 是 StarTeam 2009 R2 集成客户端支持的最新版本。下周我也许可以使用更新版本的 VS,因为 StarTeam 将升级到 2014。
    • 酷,如果升级不能解决问题,请告诉我们,我理解您的痛苦和限制,我 100% 与您同在 :)
    • 请注意,Microsoft 会在 Visual Studio 中发布 SSDT 更新。 SSDT 的最新 RTM(即非预览版)版本于 2015 年 7 月发布,该更新可用于 Visual Studio 2012。请在此处下载:msdn.microsoft.com/library/mt204009.aspx
    【解决方案3】:

    请尝试更新到最新版本的 SSDT for Visual Studio 2012。下载地址:https://msdn.microsoft.com/library/mt204009.aspx

    我已尝试使用最新版本的 SSDT 重现该问题,但没有遇到此问题。如果即使使用最新版本的 SSDT for Visual Studio 2012 仍然遇到此问题,我建议使用“开发人员工具(SSDT、BIDS 等)”类别在 https://connect.microsoft.com/SQLServer/feedback/CreateFeedback.aspx 提交 Connect 问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 2021-02-19
      • 2021-03-04
      • 2015-03-10
      • 2016-06-01
      • 2021-12-01
      • 1970-01-01
      相关资源
      最近更新 更多