我有一个列 ID 为标识一的表。接下来,我创建新的非标识列 new_ID 并使用 ID 列 + 1 中的值对其进行更新。像这样:
new_ID = ID + 1
接下来,我删除 ID 列并将 new_ID 重命名为“ID”。
以及如何在这个新列“ID”上设置身份?
我想以编程方式执行此操作!
我有一个列 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 Mobile 支持更改列标识,但在 SQL Server 2005 上不喜欢 BOL 中的示例。
因此,您的选择是使用标识列创建一个新的临时表,然后打开标识插入:
Create Table Tmp_MyTable ( Id int identity....)
SET IDENTITY_INSERT dbo.Tmp_Category ON
INSERT Into Tmp_MyTable (...)
Select From MyTable ....
Drop Table myTable
EXECUTE sp_rename N'dbo.Tmp_MyTable', N'MyTable', 'OBJECT'
此外,您可以尝试首先将该列添加为标识列,然后打开标识插入。然后删除原始列。但我不确定这是否可行。
估计你的任务运气不太好......
在表设计中,您应该能够进入属性并在身份规范下将(是身份)更改为是并分配列主键(如果它以前具有主键)。
来自 SqlServerCentral.com
Identity 是在创建表或在 alter table 语句中添加新列时设置的属性。您不能更改该列并将其设置为标识,并且在同一个表中不可能有两个标识列。
根据表的大小,是否可以简单地创建一个新表?复制旧的模式,然后使用 SET IDENTITY_INSERT ON 用旧的模式填充新的身份列。