标识列的数据类型必须是 int、bigint、smallint、tinyint、decimal 或小数位数为 0 的数字,并且该列不能为空

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

使用 Visual Studio 2012 (VS2012) 和 SQL 服务器数据工具 (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且不可为空,符合错误消息中提到的要求。

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

编辑 1

VS 2012 的 SSDT 已经在 11.1.50730.0

SQL Server Data Tools   11.1.50730.0
Microsoft SQL Server Data Tools

Visual Studio 2012 附带的 SSDT 版本非常过时,也许这就是它适用于其他人的原因?

获取较新版本的 SSDT(2013 或 2015),它应该可以工作 - 您无需支付许可证费用,您可以获得 visual studio Express 或社区附带的许可证。

编辑

请尝试将 SSDT 更新到 Visual Studio 2012 的最新版本。可在此处下载:https://msdn.microsoft.com/library/mt204009.aspx

我已经尝试使用最新版本的 SSDT 重现问题,但我没有遇到这种情况。如果您在 Visual Studio 2012 使用最新版本的 SSDT 时仍然遇到此问题,我建议使用类别 "Developer Tools (SSDT, BIDS, etc.)".

https://connect.microsoft.com/SQLServer/feedback/CreateFeedback.aspx 提交连接问题

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

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 发生了什么,这似乎已经纠正了错误——至少目前是这样。