2015-03-13 46 views
0

我在數據庫中有多個表所有表都具有作爲主鍵的id列。一次性向現有表添加標識增量屬性

我想要一個腳本,我可以將標識屬性一次添加到所有表中,而不是我一個接一個地更改。

+1

問題不清楚。 – 2015-03-13 06:34:59

+0

您使用的是什麼RDBMS?Postgres的,甲骨文中,MySQL,DB2等 – 2015-03-13 06:45:54

+0

我使用的SQL Server 2008 R2 我的問題是: 我在數據庫中的多個表無數據 僅有的表就是創建 現在我想的是..所有表應已自動標識屬性 無需手動做每桌 我想帶環一個腳本,將檢查所有表和經銷商的身份屬性應assinged – KARAN 2015-03-13 07:29:19

回答

0

您無法更改現有的身份列。

你有2種選擇:

  1. 創建標識新表&刪除現有的表

  2. 創建標識的新列&刪除現有列

但是當這些列有任何約束/關係時,請小心謹慎。

對於已經craeted表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' 

保留現有的數據值,在此你可以' t保留 新創建的標識列上的現有數據值;

標識列將舉行數的序列

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

+0

謝謝StanislovasKalašnikovas..但是這不是我所需要 我真的很感激你回答 – KARAN 2015-03-13 07:35:20

+0

我已經有空白表不包含它的數據 和所有表都有ID列,我想做主鍵以及需要分配身份插入屬性....但我不想手動去做和assinig它..我知道如何去做 我需要一個腳本,通過它我可以循環並將屬性分配給所有表格 – KARAN 2015-03-13 07:38:27

+0

請在編輯部分查看我答案中的鏈接。這是你需要的,應該爲你工作。 – 2015-03-13 07:46:06