我有一个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'.
你能告诉我在这个查询中我做错了吗。
答案 0 :(得分:0)
答案 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
相关文档: