web-dev-qa-db-ja.com

接続されているデータベースサーバーでは、 'uniqueidentifier'から 'int'への変換はサポートされていません

データベースを古いメンバーシップの使用から、mvc4に含まれているものに移行しようとしています。これは、intではなくguidを使用します。

タイプを変更すると、次のエラーが発生します。

intからuniqueidentifierへの変換は、接続されているデータベースサーバーではサポートされていません。

SQL Server Management Studioを使用してUserIdintに変更するにはどうすればよいですか?

22
I'm busy coding

新しい列を追加する必要があります(ALTER TABLE ADD [NewId] INTEGER)次に、次のコマンドを実行して、新しいID列にデータを入力します。

WITH Cte
AS
(
    SELECT *
    , ROW_NUMBER() OVER(ORDER BY [Your GUID Column Here] DESC) AS RowNumber
    FROM YourTable
)
UPDATE Cte
SET [NewId]= RowNumber
GO

そこで、クラスター化された主キーを使用できる新しいID列があります。

9
jazzytomato

最初に、データ型を、varbinaryなどのサポートされている他の型に変更します。それからあなたはそれからあなたが望むものに変換することができます。

60
Muhamed Shafeeq

前の答えは正しいですが、元の値への「結びつき」はありません。

これを試すことができます。ただし、負の値になる可能性があります。

Guid g = new Guid("{cccc3333-3333-3333-cccc-cccc3333cccc}");
byte[] _bytes = g.ToByteArray();
Int64 i = ((Int64)_bytes[0]) | ((Int64)_bytes[1] << 8) | ((Int64)_bytes[2] << 16) | ((Int64)_bytes[3] << 24);



Int64 i = -3333333;
Guid g = new Guid(i, 0, 0, new byte[] {0, 0, 0, 0, 0, 0, 0, 0});

これは「インターネットから取り込んだ」の1つなので、自己責任で使用してください。

Thomas Haratykからの以前の返答を使用します。しかし、私はこれをオプションとして提供します。

1
granadaCoder