2016-12-16 5 views
0

私は[uniqueidentifier]を関連するテーブルに対応するデータベース全体のint値に変換する必要があります。これを影響なく生産に導入する最良の方法は何ですか?GUID INTO intをSQLデータベースに変換する方法

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] 

以下の値の例を示します。

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(場合によってはID)に変更しようとしているように、インパクトは大規模になるでしょう。これはおそらくデータベース内のすべての単一のテーブルを変更する必要があり、おそらくコードの山を変更する必要があり、データベースのサイズと断片化に大きな影響を与えます。要するに、このタイプの変更は、オンラインフォーラムよりも大きなトピックです。おそらくこのプロジェクトのコンサルタントを雇うべきです。 –

答えて

-1

あなたは、メソッド名をintにvarchar型に変換するためにC#のスクリプトを使用することができますBitConverter.ToUInt32

0

早くあなたが離れてより良いクラスタ化インデックスにGUIDを持つから取得することです。あなたの問題は、変更が必要なすべての外部キーだと仮定しています。

私は、データベースにパラレルに整数列を導入し、同等の関係を作成し、guidを段階的に削除する可能性を探っています。それが遅い場合は、GUIDを非クラスタ化インデックスに変換し、クラスタ化インデックスに整数を使用します。 これは大規模なプロジェクトのようです。がんばろう。

関連する問題