2012-03-29 84 views
25

Sử dụng SQL Server 2005 làm cách nào để nhận được câu lệnh dưới đây hoặc thay vì đầu ra như tôi muốn.Chuyển đổi NULL thành chuỗi rỗng - Chuyển đổi không thành công khi chuyển đổi từ chuỗi ký tự thành uniqueidentifier

SELECT Id 'PatientId', 
     ISNULL(ParentId,'') 'ParentId' 
FROM Patients 

ParenId là một uniqueidentifier cho phép NULL, nhưng dường như tối ưu truy vấn cố gắng cũng để chuyển đổi '' trở lại uniqueidentifier cho các hàng nơi ParentId = NULL .Như tiêu đề nói đó là các thông tin lỗi chính xác các Á hậu truy vấn ném vào mặt tôi !!

  • Làm thế nào để tôi nhận được máy chủ để trở về chuỗi rỗng cho ParentId = NULL

Trả lời

53
SELECT Id 'PatientId', 
     ISNULL(CONVERT(varchar(50),ParentId),'') 'ParentId' 
FROM Patients 

ISNULL luôn cố gắng để trả về một kết quả rằng có cùng loại dữ liệu như các loại đối số đầu tiên của nó. Vì vậy, nếu bạn muốn kết quả là một chuỗi (varchar), bạn nên chắc chắn rằng đó là loại đối số đầu tiên.


COALESCE thường là một chức năng tốt hơn để sử dụng hơn ISNULL, vì nó coi tất cả kiểu dữ liệu lý luận và áp dụng precedence quy tắc thích hợp để xác định chính thức kết quả kiểu dữ liệu. Thật không may, trong trường hợp này, uniqueidentifier có mức độ ưu tiên cao hơn varchar, do đó không có tác dụng.

(Nó cũng thường ưa thích vì nó kéo dài đến hơn hai đối số)

+0

cảm ơn bạn đã cho nhiều điều hơn mong muốn. Tôi đã học được nhiều hơn từ câu trả lời của bạn Sẽ đánh dấu nó như được trả lời trong 4 phút Greetz – Deeptechtons

+0

@Damien_The_Unbeliever Tôi đã thử 'COALESCE (CONVERT (varchar (50), ParentId),' ')' và 'ISSNULL (CONVERT (varchar (50), ParentId), '') 'và tôi vẫn nhận được số không thay vì một ô trống. ParentId của tôi là nhỏ. – bteague

+0

Cũng đã thử ISNULL (CAST (ParentId như VARCHAR (50)), '') và COALESCE (CAST (ParentId như VARCHAR (50)), '') – bteague

5

Bạn cần phải CAST các ParentId như một nvarchar, do đó sản lượng luôn luôn là kiểu dữ liệu tương tự.

SELECT Id 'PatientId', 
     ISNULL(CAST(ParentId as nvarchar(100)),'') 'ParentId' 
FROM Patients 
8
Select ID, IsNull(Cast(ParentID as varchar(max)),'') from Patients 

này là cần thiết bởi vì lĩnh vực ParentID không phải là varchar loại/nvarchar. Điều này sẽ thực hiện thủ thuật:

Select ID, IsNull(ParentID,'') from Patients 
Các vấn đề liên quan