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

时间:2015-11-10 15:38:22

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

将Visual Studio 2012(VS2012)与SQL Server数据工具(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

VST的SSDT已经是11.1.50730.0

SQL Server Data Tools   11.1.50730.0
Microsoft SQL Server Data Tools

3 个答案:

答案 0 :(得分: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发生了什么,这似乎都纠正了错误 - 至少目前是这样。

答案 1 :(得分:0)

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

获取更新版本的SSDT(2013年或2015年)并且它应该可以运行 - 您不必为可以获得Visual Studio express或社区附带的许可证付费。

答案 2 :(得分:0)

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

我尝试使用最新版本的SSDT重现问题,但我没有遇到这种情况。如果您在Visual Studio 2012中使用最新版本的SSDT时仍然遇到此问题,我建议您使用类别"开发者工具(SSDT,BIDS等)在https://connect.microsoft.com/SQLServer/feedback/CreateFeedback.aspx处提交Connect问题。 #34;