2010-03-16 61 views
6

Tôi có một cột nvarchar(50) trong SQL Server 2000 bảng được định nghĩa như sau:Tại sao lệnh SQL CAST này không hoạt động?

TaskID nvarchar(50) NULL 

tôi cần phải cư cột này với SQL ngẫu nhiên GUID của việc sử dụng NEWID() function (Tôi không thể thay đổi kiểu cột để uniqueidentifier) .

Tôi cố gắng này:

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

nhưng tôi đã nhận được lỗi sau:

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

Tôi cũng đã cố gắng:

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

nhưng sau đó đã nhận lỗi này:

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

.210

Tôi không hiểu tại sao điều này không làm việc nhưng điều này không:

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

Tôi cũng đã cố gắng CONVERT(nvarchar, NEWID())CONVERT(nvarchar(50), NEWID()) nhưng có những sai lầm tương tự.

Cập nhật:

Ok, thị lực của tôi đang xảy ra, kích thước cột trên bàn là nvarchar(32) không 50. lời xin lỗi sâu sắc nhất cho timewasting và cảm ơn tất cả các câu trả lời.

+0

Bạn có thể và gây ra trên bảng này? Bạn có thể nhận được thông báo lỗi từ trình kích hoạt. sp_helpTrigger 'TaskData' –

+0

@GMastros - không, vấn đề là PEBKAC/PICNIC thường được gọi là mã 'ID 10T'. – Kev

Trả lời

11

thử nghiệm này kịch bản hoạt động tốt đối với tôi ... Tôi chỉ có thể gợi ý rằng có lẽ taskID của bạn không phải là một NVARCHAR (50) như bạn nói? Hãy thử một sp_columns chỉ để kiểm tra ...

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

Vui lòng thử các diễn viên sau:

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

sử dụng kiểu dữ liệu varchar, nvarchar cần tăng gấp đôi kích thước

14

Khi bạn không chỉ định kích thước của varchar bạn/nvarchar trong một dàn diễn viên hoặc chuyển đổi, nó mặc định 30 ký tự. Bạn cần 36 ký tự để chuyển đổi một guid thành một chuỗi. Đó là lý do tại sao bạn nhận được lỗi.

Hoặc trong số này sẽ làm việc:

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

Điều này dường như với tôi là câu trả lời chính xác nhất ở đây. –

Các vấn đề liên quan