我在数据库中有多个表,所有表都有id列,这是主键。
我想要一个脚本,通过该脚本我可以一次向所有表添加标识属性,而不是逐个更改。
答案 0 :(得分:0)
您无法更改现有列的标识。
您有两个选择:
使用identity&创建一个新表删除现有表
使用identity&创建一个新列删除现有列
但是当这些列有任何约束/关系时,请小心谨慎。
对于已经提出来的表
Names
Drop table Names
Create table Names
(
ID int,
Name varchar(50)
)
Insert Into Names Values(1,'SQL Server')
Insert Into Names Values(2,'ASP.NET')
Insert Into Names Values(4,'C#')
在此方法中,您可以保留新的现有数据值 创建了标识列
CREATE TABLE dbo.Tmp_Names
(
Id int NOT NULL IDENTITY (1, 1),
Name varchar(50) NULL
) ON [PRIMARY]
go
SET IDENTITY_INSERT dbo.Tmp_Names ON
go
IF EXISTS(SELECT * FROM dbo.Names)
INSERT INTO dbo.Tmp_Names (Id, Name)
SELECT Id, Name FROM dbo.Names TABLOCKX
go
SET IDENTITY_INSERT dbo.Tmp_Names OFF
go
DROP TABLE dbo.Names
go
Exec sp_rename 'Tmp_Names', 'Names'
在这种方法中,您无法保留现有的数据值 新创建的标识列;
标识列将保存数字序列
Alter Table Names Add Id_new Int Identity(1,1)
Go
Alter Table Names Drop Column ID
Go
Exec sp_rename 'Names.Id_new', 'ID','Column'
您可以做的是编写一个快速查询来为您生成SQL 像这样:
USE INFORMATION_SCHEMA;
SELECT
CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` CONVERT TO CHARACTER SET UTF8;")
AS MySQLCMD FROM TABLES
WHERE TABLE_SCHEMA = "your_schema_goes_here";
然后你可以运行它的输出来做你需要的。
修改强>