Sql server SQL Server赢了';Don’不要让我做列标识

Sql server SQL Server赢了';Don’不要让我做列标识,sql-server,tsql,Sql Server,Tsql,因此,我在SQL Server中有一个表,其中包含主键列和其他4列。当我修改表并选择主键列作为标识时,它不允许我保存表 如何通过T-SQL或其他方式使其成为标识列,而不必进入UI 谢谢 下面是创建 USE [db] GO /****** Object: Table [dbo].[tblMessages] Script Date: 04/05/2011 11:58:25 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO

因此,我在SQL Server中有一个表,其中包含主键列和其他4列。当我修改表并选择主键列作为标识时,它不允许我保存表

如何通过T-SQL或其他方式使其成为标识列,而不必进入UI

谢谢

下面是创建

USE [db]
GO

/****** Object:  Table [dbo].[tblMessages]    Script Date: 04/05/2011 11:58:25 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[tblMessages](
    [messageId] [int] NOT NULL,
    [messageText] [varchar](500) NOT NULL,
    [messageLatitude] [float] NOT NULL,
    [messageLongitude] [float] NOT NULL,
    [messageTimestamp] [datetime] NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [messageId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO
编辑

如果您的表是空的,只需将其删除,并在PK列的
INT
之后添加
IDENTITY
,即可完成操作。

编辑


如果您的表是空的,只需将其放下,在PK列上的
INT
之后添加
IDENTITY
,就可以完成操作。

您无法在创建现有列后将其转换为
IDENTITY

ALTER TABLE dbo.YourTable
  ALTER COLUMN YourColumn INT IDENTITY
将导致错误:

味精156,第15级,状态1,第2行
关键字附近的语法不正确 “身份”


您需要创建一个类型为
INT-IDENTITY
的新列
,然后可能删除旧列。或者,如果您的表仍然为空:将其删除,并使用ID列的正确设置重新创建它

您无法在创建现有列后将其转换为
标识列

ALTER TABLE dbo.YourTable
  ALTER COLUMN YourColumn INT IDENTITY
将导致错误:

味精156,第15级,状态1,第2行
关键字附近的语法不正确 “身份”



您需要创建一个类型为
INT-IDENTITY
的新列
,然后可能删除旧列。或者,如果您的表仍然为空:将其删除并使用ID列的正确设置重新创建它

请发布该表的创建脚本。请在上面的编辑中发布如何在表中有数据时使用代码执行此操作。或者您可以使用SSMS,它将为您删除并重新创建所有内容。请发布表的创建脚本。请在上面的编辑中发布如何在表中有数据时使用代码执行此操作。或者你可以使用SSM,它将为你删除并重新创建所有内容。+1甚至在我发布之前,你就做对了-我只是先误读了你的答案…@Marc-你提供了一个关于为什么的解释,我跳过了。好吧,我只是引用了微软的错误消息-仍然没有真正解释为什么这是不可能的(如果是的话会很好!)@marc-我猜是因为它需要跟踪历史值来生成准确的种子值,如果你不告诉+1,那SQL就不行了,甚至在我发布之前你就知道了-我只是先误读了你的答案…@Marc-你解释了为什么,我跳过了。嗯,我只是引用了Microsoft的错误消息-仍然没有真正解释为什么这是不可能的(如果是的话那就太好了!)@marc-我猜是因为它需要跟踪历史值来生成准确的种子值,而SQL不会这样做,除非你告诉它SQL Server 2008这是可能的。@Martin:好的,谢谢-很高兴知道-尽管这感觉有点混乱…的确,但它无疑是大型表的最佳解决方案,因为它或多或少是即时的,而不是进行大量日志记录和锁定活动。对于SQL Server 2008来说,这是可能的。@Martin:好的,谢谢-很高兴知道-尽管这感觉有点混乱…的确,但它无疑是大型表的最佳解决方案,因为它或多或少是即时的,而不是进行大量日志记录和锁定活动。