如何使用T-SQL修改表并在PK列上设置标识?
感谢您的帮助。
如何使用T-SQL修改表并在PK列上设置标识?
感谢您的帮助。
CREATE TABLE dbo.tblFoo
(
bar INT PRIMARY KEY,
filler CHAR(8000),
filler2 CHAR(49)
)
INSERT INTO dbo.tblFoo (bar)
SELECT TOP (10000) ROW_NUMBER() OVER (ORDER BY (SELECT 0))
FROM master..spt_values v1, master..spt_values v2
identity
列(几乎即时)。BEGIN TRY;
BEGIN TRANSACTION;
/*Using DBCC CHECKIDENT('dbo.tblFoo') is slow so use dynamic SQL to
set the correct seed in the table definition instead*/
DECLARE @TableScript nvarchar(max)
SELECT @TableScript =
'
CREATE TABLE dbo.Destination(
bar INT IDENTITY(' +
CAST(ISNULL(MAX(bar),0)+1 AS VARCHAR) + ',1) PRIMARY KEY,
filler CHAR(8000),
filler2 CHAR(49)
)
ALTER TABLE dbo.tblFoo SWITCH TO dbo.Destination;
'
FROM dbo.tblFoo
WITH (TABLOCKX,HOLDLOCK)
EXEC(@TableScript)
DROP TABLE dbo.tblFoo;
EXECUTE sp_rename N'dbo.Destination', N'tblFoo', 'OBJECT';
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
PRINT ERROR_MESSAGE();
END CATCH;
INSERT INTO dbo.tblFoo (filler,filler2)
OUTPUT inserted.*
VALUES ('foo','bar')
bar filler filler2
----------- --------- ---------
10001 foo bar
DROP TABLE dbo.tblFoo
IDENTITY()
”,对吧? - Damien_The_UnbelieverALTER TABLE ... SWITCH
是新的神奇部分。太好了。我会记住这个方法的。 - Damien_The_UnbelieverDBCC CHECKIDENT
,它几乎是瞬间完成的。 - Martin Smith这是你正在寻找的答案吗?
DBCC CHECKIDENT(
'DBName.dbo.TableName'
,RESEED --[, new_reseed_value ]
)
使用示例:
DBCC CHECKIDENT(
'DBName.dbo.TableName'
)
检查身份信息:当前身份值为'1',当前列值为'1211031236'。 DBCC 执行完成。如果 DBCC 打印错误信息,请联系系统管理员。
DBCC CHECKIDENT(
'DBName.dbo.TableName'
,RESEED --[, new_reseed_value ]
)
检查身份信息:当前身份值为'1211031236',当前列值为'1211031236'。
DBCC执行完成。如果DBCC打印错误消息,请联系系统管理员。由于在 insert
中只能忽略标识列,而不能忽略更新列,因此您需要中间表。以下是一个示例:
create table TestTable (pk int constraint PK_TestTable primary key,
name varchar(30))
create table TestTable2 (pk int constraint PK_TestTable identity primary key,
name varchar(30))
set identity_insert TestTable2 on
insert TestTable2 (pk, name) select pk, name from TestTable
set identity_insert TestTable2 off
drop table TestTable
exec sp_rename 'TestTable2', 'TestTable'
ALTER TABLE tab ALTER COLUMN col SET IDENTITY
更多的代码。你需要使用 ALTER TABLE 命令 - 总是先在开发或预生产环境中进行测试!
示例 G 最接近您的要求:
CREATE TABLE dbo.doc_exe ( column_a INT CONSTRAINT column_a_un UNIQUE) ; GO ALTER TABLE dbo.doc_exe ADD
-- 添加一个 PRIMARY KEY identity 列。 column_b INT IDENTITY CONSTRAINT column_b_pk PRIMARY KEY,