【问题标题】:Add identity increment property to existing tables at once一次将标识增量属性添加到现有表
【发布时间】:2015-03-13 16:12:49
【问题描述】:

我在数据库中有多个表,所有表都有 id 列,这是主键。

我想要一个脚本,通过它我可以一次将身份属性添加到所有表,而不是我去一个一个地更改。

【问题讨论】:

  • 问题不清楚。
  • 您使用的是什么 RDBMS? Postgres、Oracle、MySQL、DB2 等
  • 我正在使用 Sql server 2008 r2 我的问题是:我在数据库中有多个没有数据的表 只有创建了表 现在我想要的是..所有表都应该具有自动标识属性,而无需在每个表上手动执行表我想要一个带有循环的脚本,它将检查所有表并且应该分配自动标识属性

标签: sql sql-server


【解决方案1】:

您不能更改现有的身份列。

你有两个选择:

  1. 创建具有标识的新表并删除现有表

  2. 创建具有标识的新列并删除现有列

但是当这些列有任何约束/关系时要小心。

对于已经创建的表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'

Source 1


您可以做的是编写一个快速查询来为您生成 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";

然后你可以运行这个输出来做你需要的。

Source 2

编辑

您可以查看Altering Multiple Tables at once

【讨论】:

  • 谢谢你 Stanislovas Kalašnikovas.. 但这不是我需要的我真的很感谢你的回答
  • 我已经有空白表,其中不包含任何数据,并且所有表都有 id 列,我想创建主键以及需要分配标识插入属性....但我不想做通过去和assinig手动它..我知道怎么做我需要一个脚本,我可以通过它循环并将属性分配给所有表
  • 在编辑部分检查我的答案中的链接。这是你需要的,应该适合你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2022-10-05
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多