我有一个数据库,其中所有表都有名为ID的列。我需要更改数据库中的所有表并向这些列添加标识。有可能进行一些查询吗?或者我必须手动完成吗?
非常感谢。
答案 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
.