2010-03-16 22 views
6

मेरे पास एक SQL Server 2000 तालिका में एक nvarchar(50) कॉलम है जो निम्नानुसार परिभाषित किया गया है:यह एसक्यूएल सीएएसटी क्यों काम नहीं करेगा?

TaskID nvarchar(50) NULL 

मुझे NEWID() फ़ंक्शन का उपयोग करके यादृच्छिक SQL GUID के साथ इस कॉलम को पॉप्युलेट करने की आवश्यकता है (मैं कॉलम प्रकार को uniqueidentifier में बदलने में असमर्थ हूं)।

मैंने यह कोशिश की:

UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar) 

लेकिन मुझे निम्न त्रुटि मिली:

Msg 8115, Level 16, State 2, Line 1 Arithmetic overflow error converting expression to data type nvarchar.

मैंने यह भी कोशिश की:

UPDATE TaskData SET TaskID = CAST(NEWID() AS nvarchar(50)) 

लेकिन फिर यह त्रुटि मिली:

Msg 8152, Level 16, State 6, Line 1 String or binary data would be truncated.

मुझे समझ में नहीं आता कि यह क्यों काम नहीं करता है लेकिन यह करता है:

DECLARE @TaskID nvarchar(50) 
SET @TaskID = CAST(NEW() AS nvarchar(50)) 

मैंने CONVERT(nvarchar, NEWID()) और CONVERT(nvarchar(50), NEWID()) भी कोशिश की लेकिन मुझे एक ही त्रुटि मिली।

अद्यतन:

ठीक है, मेरी दृष्टि चल रही है, तालिका पर कॉलम आकार nvarchar(32) 50 नहीं है। timewasting के लिए सबसे गहरी माफी और सभी उत्तरों के लिए धन्यवाद।

+0

आपके पास है और इस मेज पर चलाता है क्या? आपको ट्रिगर से त्रुटि संदेश मिल रहे हैं। sp_helpTrigger 'टास्कडाटा' –

+0

@GMastros - नहीं, समस्या पीईबीकेएसी/पिकनिक अधिक सामान्य रूप से कोड 'आईडी 10T' के रूप में जाना जाता था। – Kev

उत्तर

11

यह परीक्षण स्क्रिप्ट मेरे लिए ठीक काम करता है ... मैं केवल सुझाव दे सकते हैं कि हो सकता है आपके TaskId एक NVARCHAR (50) आप की तरह कहते हैं कि नहीं है? एक sp_columns सिर्फ जांच करने के लिए ...

CREATE Table #TaskData (TaskId NVARCHAR(50)) 
INSERT INTO #TaskData (TaskId) SELECT CONVERT(NVARCHAR(50), NEWID()) 
UPDATE #TaskData SET TaskId = CONVERT(NVARCHAR(50), NEWID()) 
DROP TABLE #TaskData 
3

निम्नलिखित डाली प्रयास करें:

CAST(NEWID() AS varchar(255)) 
0

उपयोग varchar डेटा प्रकार की कोशिश करो, nvarchar दुगुने आकार

14

आप एक डाली के दौरान अपने varchar/nvarchar के आकार निर्दिष्ट नहीं करते हैं जब या परिवर्तित की जरूरत है, यह करने के लिए चूक 30 अक्षर एक ग्रिड को स्ट्रिंग में बदलने के लिए आपको 36 वर्णों की आवश्यकता है। यही कारण है कि आपको त्रुटि मिलती है।

इनमें से किसी काम करेगा:

Select Cast(NewId() as nvarchar(36)), CONVERT(nvarchar(36), NEWID()) 
+2

ऐसा लगता है कि यह मुझे सबसे सटीक उत्तर माना जाता है। –

संबंधित मुद्दे