2016-12-16 12 views
0

我在下面提到的表中也需要將[uniqueidentifier]轉換爲整個數據庫中的int值以及相應的相關表。在沒有影響的情況下將其實施到生產中的最佳方法是什麼?如何在sql數據庫中轉換GUID INTO int

CREATE TABLE [usp].[Test]([AccountId] [uniqueidentifier] NOT NULL CONSTRAINT [DF_Account_AccountId] DEFAULT (newsequentialid()), [AccountName] nvarchar NOT NULL, [AccountDescription] nvarchar NULL, [AccountStatusId] [uniqueidentifier] NOT NULL, [AccountTypeId] [uniqueidentifier] NOT NULL, [GeoLocation] varchar NULL, [ContactInfoId] [uniqueidentifier] NULL, [ParentId] [uniqueidentifier] NULL, [Encoding] varchar NOT NULL, [IsDeleted] [bit] NULL DEFAULT ((0)), [AccountHeirarchy] nvarchar NULL, 

CONSTRAINT [PK_Account] PRIMARY KEY CLUSTERED ([AccountId] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

value values below。

AccountId AccountName AccountDescription AccountStatusId AccountTypeId GeoLocation ContactInfoId ParentId Encoding IsDeleted AccountHeirarchy HID 

A70D7DCE-4F1F-E211-AAA2-0050568F021A SysAccount Administrator Account A0000000-0000-0000-0000-000000000000 A70D7DCE-4F1F-E211-AAA2-0050568F021B NULL NULL NULL 1 0 NULL 
+0

uniqueidentifier是16個字節。一個int只有4個。這不起作用。是否有任何具體要求做這樣的事情? –

+0

提供DML形式的示例,可以運行.. – TheGameiswar

+1

對於初學者,您不要在生產中引入此示例,您可以在測試環境中重複執行此操作。這種影響會非常大,因爲它聽起來像是在嘗試從使用guid作爲主鍵到作爲主鍵的int(可能是identity)。這需要更改數據庫中的每個表,這可能需要更改大量的代碼,這會對數據庫大小和分段造成重大影響。簡而言之,這種變化是比在線論壇更大的話題。你應該爲這個項目聘請一位顧問。 –

回答

-1

你可以使用C#腳本將varchar轉換爲int的方法名是BitConverter.ToUInt32

0

你不必在一個聚集索引的GUID更好脫身越快。我假設你的問題是所有需要改變的外鍵。

我會探討將整數列並行引入數據庫的可能性,從而創建等價關係並逐步淘汰guid。如果速度緩慢,我會把guid變成非聚集索引,並使用整數作爲聚集索引。 這聽起來像一個巨大的項目。祝你好運。