[英]Change ID(INT) to ID(UUID)
在現有數據庫中,我想將現有ID更改為UUID上的int
如下所示,該列現在是具有CLUSTERED索引的主鍵
樣本表創建代碼:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tblUsers](
[UserID] [int] IDENTITY(1,1) NOT NULL,
[LastName] [nvarchar](100) NOT NULL,
[LoginName] [nvarchar](25) NOT NULL,
[RoleID] [int] NOT NULL,
CONSTRAINT [PK_tblUsers] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
如何快速解決許多表的問題?
該表可以有很多行,所以我想知道如何做索引。 通常,您不應在UUID上創建索引。
編輯:
另一個引用表的示例:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tblUsersDist](
[UserDistID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NOT NULL,
[LocationId] [int] NOT NULL,
CONSTRAINT [PK_tblUsersDist] PRIMARY KEY CLUSTERED
(
[UserDistID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
你不得不:
PRIMARY KEY
放在原始表上。 uniqueidentifier
數據類型的新列。 UUID
值更新新列。 NOT NULL
( PRIMARY KEY
所需)。 INT
列。 UUID
列以匹配原始的INT
列(可選)。 PRIMARY KEY
約束。 例:
CREATE TABLE Test (
UserID INT IDENTITY,
Data INT,
CONSTRAINT PK_Test PRIMARY KEY CLUSTERED (UserID))
INSERT INTO Test (Data)
VALUES (10), (20)
BEGIN TRANSACTION
ALTER TABLE Test DROP PK_Test
ALTER TABLE Test ADD UUID uniqueidentifier
UPDATE Test SET UUID = NEWID()
ALTER TABLE Test ALTER COLUMN UUID uniqueidentifier NOT NULL
ALTER TABLE Test DROP COLUMN UserID
EXEC sp_rename 'dbo.Test.UUID', 'UserID', 'COLUMN'
ALTER TABLE Test ADD CONSTRAINT PK_Test PRIMARY KEY (UserID)
COMMIT
請注意,該示例缺少正確的錯誤處理。 此外,如果您有外鍵,則必須在開始時將其刪除並在末尾重新創建它們,但要注意新的數據類型 。
就個人而言,我將創建一個新表,插入舊值,為每個表效仿,然后刪除舊表並重命名新表。 混亂,但是更改PK的數據類型總是很麻煩。
CREATE TABLE dbo.tblUsers_New (UserID uniqueidentifier
DEFAULT NEWSEQUENTIALID() NOT NULL,
OldUserID int NULL, --incase you'll keep it, as new user won't have a new "old" ID
LastName nvarchar(100) NOT NULL,
LoginName nvarchar(25) NOT NULL,
RoleID int, --Is that going to be a GUID too?
CONSTRAINT [PK_tblUsers]
PRIMARY KEY CLUSTERED ([UserID] ASC));
INSERT INTO tblUsers_New (OldUserID,LastName,LoginName,RoleID)
SELECT UserID,
LastName,
LoginName,
RoleID
FROM dbo.tblUsers
ORDER BY UserID ASC;
/* Repeat process for all of your other tables, maintaining referencial integrity.
Start dropping the old tables, again, maintaining referential integrity
and renaming the new tables.
*/
DROP TABLE dbo.tbl_users;
EXEC sp_rename N'dbo.tblUsers_New', N'tblUsers';
/* Then finally set up the Foreign key constraints.*/
當然,這只是如何做的一個模糊的主意,因為我們對您的數據只有一個模糊的主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.