SQL Server: chuyển đổi UniqueIdentifier thành chuỗi trong câu lệnh tình huống


136

Chúng tôi có một bảng nhật ký có một cột thông báo đôi khi có dấu vết ngăn xếp ngoại lệ. Tôi có một số tiêu chí xác định nếu tin nhắn có điều này. Chúng tôi không muốn hiển thị những tin nhắn này cho khách hàng mà thay vào đó có một tin nhắn như:

Xảy ra lỗi nội bộ. Liên hệ với chúng tôi với mã tham chiếu xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

trong đó xxx vv là một cột hướng dẫn trong bảng. Tôi đang viết Proc lưu trữ như thế này:

declare @exceptionCriteria nvarchar(50)
select @exceptionCriteria = '%<enter criteria etc>%'

select LogDate,
       case
       when Message like @exceptionCriteria
       then 'Internal Error Occured. Reference Code: ' + str(RequestID)
       else Message
       end
  from UpdateQueue

RequestIDlà một kiểu dữ liệu Guid trong SQL Server và không chuyển đổi thành chuỗi ở đây. Tôi đã thấy một số mã về cách chuyển đổi một Hướng dẫn thành chuỗi, nhưng nó có nhiều dòng và tôi không nghĩ rằng nó sẽ hoạt động trong một tuyên bố trường hợp. Có ý kiến ​​gì không?

Câu trả lời:


256

Tôi nghĩ rằng tôi đã tìm thấy câu trả lời:

convert(nvarchar(50), RequestID)

Đây là liên kết nơi tôi tìm thấy thông tin này:

http://msdn.microsoft.com/en-us/l Library / ms187928.aspx


21
Ngoài ra, truyền (RequestID dưới dạng varchar (50))
MK_Dev

3
Sự khác biệt cơ bản giữa cast () và convert () là gì?
RK Sharma

5
@RKSharma đó là một câu hỏi hoàn hảo để bạn hỏi trên stackoverflow.com hoặc tìm kiếm trang web này để xem ai đó đã trả lời nó chưa.
aarona

1
Tôi không biết tại sao tôi chọn nvarchar, ít hơn nhiều nvarchar(50). Một mã định danh duy nhất, khi được chuyển đổi thành giá trị văn bản được xử lý trong hex-dash-36.
dùng2864740

9
Như những câu trả lời khác nói, bạn có thể ngưng tụ điều này cast(RequestID as char(36)).
Frank Tan

90

Có thể sử dụng chức năng chuyển đổi ở đây, nhưng 36 ký tự là đủ để giữ giá trị định danh duy nhất:

convert(nvarchar(36), requestID) as requestID

2
bởi vì độ dài được cố định ngay cả varchar (36) là đủ ở đây
gdbdable

11
Bạn nói "đã sửa" và "varchar" trong cùng một câu ... thì sao char(36)? Bạn cũng có thể sử dụng nchar(36), nhưng vì GUID không chứa unicode, nên nó không mua gì cho bạn. Ngược lại, hoạt động với charthường nhanh hơn varchar.
r2evans

47

Theo tôi, uniqueidentifier/ GUID không phải là một varcharmà không phải là nvarcharmột char(36). Vì vậy, tôi sử dụng:

CAST(xyz AS char(36))

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.