MSSQL通过修改所有表列来添加IDENTITY



我有一个数据库,其中所有表都有名为ID的列。我需要更改数据库中的所有表,并为这些列添加身份。可以问一些问题吗?还是我必须手动做?

遗憾的是,在SQL Server中不能向现有列添加标识属性。您需要删除一个现有的属性,然后使用该属性创建一个新属性。您可以通过查询系统表和使用动态sql来自动执行此任务。但是如果在ID列中已经有一些数据,这将使事情变得更加棘手,因为您需要保留现有数据。这是一个单表的脚本,使用动态sql自动执行数据库中的所有表将有点棘手…

表Test_table有2列:id和val。

-- Move data to temp storage
SELECT ID,
   VAL
  INTO #temp_table
  FROM dbo.test_table
-- Remove data from original table
DELETE
  FROM dbo.test_table
-- Drop and Create ID column
ALTER TABLE dbo.test_table
DROP COLUMN ID
ALTER TABLE dbo.test_table
ADD ID int IDENTITY(1,1)
-- Move data back to original table
SET IDENTITY_INSERT dbo.test_table ON
INSERT INTO dbo.test_table (ID, VAL)
SELECT ID, VAL
FROM #temp_table
DECLARE @MaxID int
SELECT @MaxID = MAX(ID) + 1
FROM dbo.test_table
SET IDENTITY_INSERT dbo.test_table OFF
-- Reseed IDENTITY property
DBCC CHECKIDENT ('dbo.test_table', RESEED, @MaxID)

并不是对所有的表都这样做。下面是我要做的:使用T-SQL生成一个(大)脚本来执行所有的更改,然后手动运行该脚本。

您可以使用SWITCH向现有列添加identity属性,而无需移动数据。

最新更新