sql - 如何以编程方式将非身份列更改为身份一?

标签 sql sql-server sql-server-2005 tsql identity

我有一个列 ID 为标识一的表。接下来,我创建新的非标识列 new_ID 并使用 ID 列 + 1 中的值对其进行更新。像这样:

new_ID = ID + 1

接下来,我删除 ID 列并将 new_ID 重命名为“ID”。

以及如何在这个新列“ID”上设置身份?

我想以编程方式执行此操作!

最佳答案

据我所知,您必须创建一个临时表,其中 ID 字段创建为 IDENTITY,然后从原始表中复制所有数据。最后,删除原始表并重命名临时表。这是一个表(名为 TestTable)的示例,其中仅包含一个字段,称为 ID(整数,非 IDENTITY):

BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_TestTable
    (
    ID int NOT NULL IDENTITY (1, 1)
    )  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_TestTable ON
GO
IF EXISTS(SELECT * FROM dbo.TestTable)
     EXEC('INSERT INTO dbo.Tmp_TestTable (ID)
        SELECT ID FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_TestTable OFF
GO
DROP TABLE dbo.TestTable
GO
EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT' 
GO
COMMIT

关于sql - 如何以编程方式将非身份列更改为身份一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/756354/

相关文章:

sql - 将行转置为单列

sql-server - 在 SQL Server 中将图像类型数据转换为 XML/纯文本

SQL - 使用适用于多行的 WHERE 进行选择

c# - 将密码存储到sql中的最佳方法

sql - Microsoft SQL Server : Any way to tell when a record was created?

sql-server - 与 SQL Server 2005 Enterprise 相比,SQL Server 2005 Express 中的数据库性能是否较慢?

php - 无法在 while 循环之外访问 SQL 数据

sql - 使用 jsonb_set() 进行更新仅影响嵌套数组中的一个对象

mysql - 如何包含硬编码值以从 mysql 查询输出?

选择特定于数据库的对象时,SQL Server Management Studio 连接默认为 'master'