2013-02-25 33 views
15

Tôi sắp di chuyển cơ sở dữ liệu của mình từ sử dụng thành viên cũ sang thành viên được bao gồm trong mvc4, sử dụng int thay vì guid.Chuyển đổi từ 'uniqueidentifier' thành 'int' không được hỗ trợ trên máy chủ cơ sở dữ liệu đã kết nối

Khi thay đổi loại I được lỗi sau:

Conversion from int to uniqueidentifier is not supported on the connected database server.

Làm thế nào tôi có thể thay đổi UserId để int qua SQL Server Management Studio?

+1

Các kiểu dữ liệu không tương thích, bạn sẽ cần phải chuyển đổi chúng bằng cách sử dụng phép tính phù hợp với bạn – Lamak

Trả lời

6

Bạn cần phải thêm một cột mới (ALTER TABLE ADD [NewId] INTEGER) sau đó chạy sau để cư cột id mới:

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

Ở đó bạn có một cột ID mới mà bạn có thể sử dụng một chìa khóa cụm tiểu

1

Câu trả lời trước là chính xác, nhưng không có "buộc lại" với giá trị ban đầu.

Bạn có thể ~ thử cách này. Nhưng nó có thể dẫn đến một giá trị tiêu cực.

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}); 

Đó là một trong những "Tôi đã tách khỏi internet", vì vậy hãy tự chịu rủi ro.

Tôi sẽ trả lời câu trả lời trước đó từ Thomas Haratyk. Nhưng tôi cung cấp tùy chọn này.

39

Loại dữ liệu thay đổi đầu tiên cho bất kỳ loại được hỗ trợ nào khác như biến thể hoặc bất kỳ thứ gì. sau đó bạn có thể chuyển đổi từ đó thành những gì bạn muốn.

+1

Nó hoạt động ... cảm ơn ... –