ALTER COLUMN与INTEGER数据类型,NOT NULL,PRIMARY KEY,自动增量

时间:2015-02-04 08:58:47

标签: sql-server

我有一个MySQL QUERY并且工作正常。 查询是:

ALTER TABLE run 
CHANGE RN_RUN_ID RN_RUN_ID INT(11) NOT NULL AUTO_INCREMENT, 
ADD PRIMARY KEY (RN_RUN_ID);

我尝试执行相同的Query并在MSSQL中修改了错误。 MSSQL QUERY IS:

ALTER TABLE run ALTER COLUMN RN_RUN_ID 
RN_RUN_ID INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (RN_RUN_ID);

错误是:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'AUTO_INCREMENT'.

你能告诉我在这个查询中我做错了吗。

2 个答案:

答案 0 :(得分:0)

你不能直接这样做。

请参阅此帖子:Adding an identity to an existing column

第一个答案。

答案 1 :(得分:0)

在SQL Server中没有这样的AUTO_INCREMENT选项。请查看文档。等价物是IDENTITY

您无法直接修改列以成为IDENTITY。您需要在表上创建一个新列,或者创建一个新表并重命名它。它有一些棘手的部分(允许插入标识列,重命名列,以及其他一些东西)。 Look this SO answer

将PK添加到表中的语法也存在差异:

ALTER TABLE run
ADD CONSTRAINT PK PRIMARY KEY (rn_run_id)

如果您可以访问SQL Server Management Studio,则可以轻松获取完整脚本:

  • 向数据库中添加新图表
  • 将表格添加到图表中(严格点击窗口,然后使用上下文菜单)
  • 保存图表(以后可以删除)
  • 右键单击表格并选择自定义视图
  • 再次右键单击表格,然后选择“修改自定义视图”。将身份,身份初始值,身份增量,密钥等所需元素添加到自定义视图
  • 修改图中的列属性
  • 转到“表设计器”菜单,然后选择最后一个选项“生成更改脚本”。您将获得一个脚本,可以为您完成所有更改。例如:

执行此过程的示例(通过修改表id的列test):

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_test
    (
    id int NOT NULL IDENTITY (10, 2)
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_test SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_test ON
GO
IF EXISTS(SELECT * FROM dbo.test)
     EXEC('INSERT INTO dbo.Tmp_test (id)
        SELECT id FROM dbo.test WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_test OFF
GO
DROP TABLE dbo.test
GO
EXECUTE sp_rename N'dbo.Tmp_test', N'test', 'OBJECT' 
GO
COMMIT

注意:菜单选项的名称可能不同,我现在手边没有英文SSMS

相关文档: