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

时间:2014-06-30 12:45:12

标签: sql sql-server sql-server-2008

我有一个数据库,其中所有表都有名为ID的列。我需要更改数据库中的所有表并向这些列添加标识。有可能进行一些查询吗?或者我必须手动完成吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

不幸的是,在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)

答案 1 :(得分:0)

没有办法为所有表格执行此操作。这就是我要做的事情:使用T-SQL生成执行所有更改的(大)脚本,然后手动运行该脚本。

You can add the identity property to existing columns without data movement using SWITCH.