2013-02-25 110 views
15

पर समर्थित नहीं है। मैं mvc4 में शामिल एक से पुरानी सदस्यता का उपयोग करने से अपने डेटाबेस को माइग्रेट करने वाला हूं, जो guid के बजाय int का उपयोग करता है।'अद्वितीय पहचानकर्ता' से 'int' में रूपांतरण कनेक्टेड डेटाबेस सर्वर

जब प्रकार बदलने मैं त्रुटि निम्न हो:

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

मैं कैसे एसक्यूएल सर्वर प्रबंधन स्टूडियो के माध्यम से int को UserId बदल सकता हूँ?

+1

उन डेटाटाइप संगत नहीं हैं, आपको उनके लिए काम करने वाली गणना का उपयोग करके उन्हें बदलने की आवश्यकता होगी – Lamak

उत्तर

6

आप एक नया स्तंभ (ALTER TABLE ADD [NewId] INTEGER) जोड़ने के लिए फिर नए आईडी स्तंभ को भरने के लिए निम्नलिखित चलाने:

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

वहाँ आप एक नया आईडी स्तंभ है कि आप एक प्राथमिक क्लस्टर कुंजी का उपयोग कर सकते

1

पिछले उत्तर सही है, लेकिन मूल मूल्य के लिए कोई "टाई बैक" नहीं है।

आप इसे आजमा सकते हैं। लेकिन इसका परिणाम नकारात्मक मूल्य हो सकता है।

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

इनमें से एक है "मैं इंटरनेट से फिसल गया", इसलिए अपने जोखिम पर उपयोग करें।

मैं थॉमस हरैटिक से पिछली प्रतिक्रिया के साथ जाऊंगा। लेकिन मैं इसे एक विकल्प के रूप में पेश करता हूं।

39

पहले किसी भी अन्य समर्थित प्रकार प्रकार डेटा प्रकार को विविध या कुछ प्रकार के रूप में बदलें। तो आप उस से बदल सकते हैं जो आप चाहते हैं।

+1

यह काम करता है ... धन्यवाद ... –