2012-03-29 8 views
25

Używając programu SQL Server 2005, w jaki sposób uzyskać poniższe instrukcje, a raczej dane wyjściowe, tak jak chcę.Konwertuj NULL na pusty ciąg znaków - Konwersja nie powiodła się podczas konwersji z ciągu znaków na uniqueidentifier

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

ParenId jest uniqueidentifier który pozwala NULL, ale wydaje się, że optymalizator kwerendy próbuje również konwertować '' powrotem do uniqueidentifier dla wierszy gdzie ParentId = NULL .Jak mówi tytuł to dokładne informacje o błędzie biegacz zapytania rzuca w moją twarz !!

  • Jak uzyskać serwer powrócić pusty ciąg dla ParentId = NULL

Odpowiedz

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

ISNULL zawsze stara się powrócić do rezultatu, który ma sam typ danych jako typ swojego pierwszego argumentu. Jeśli chcesz, aby wynik był ciągiem znaków (varchar), najlepiej upewnij się, że jest to typ pierwszego argumentu.


COALESCE jest zazwyczaj lepsza funkcja w obsłudze niż ISNULL, ponieważ uważa wszystkie typy danych argumentów i stosuje odpowiednie precedence reguły do ​​ustalenia ostatecznej wynikającej typ danych. Niestety w tym przypadku uniqueidentifier ma wyższy priorytet niż varchar, więc to nie pomaga.

(Jest to także ogół korzystne, ponieważ rozciąga się na więcej niż dwóch argumentów)

+0

dziękuję za dawanie więcej niż chciał. O wiele więcej nauczyłem się z twojej odpowiedzi Oznaczę to jako odpowiedź w 4 minuty Greetz – Deeptechtons

+0

@Damien_The_Unbeliever Próbowałem "COALESCE (CONVERT (varchar (50), ParentId)," ')' i 'ISSNULL (CONVERT (varchar (50), ParentId), '') 'i wciąż otrzymuję zero zamiast pustej komórki. Mój ParentId jest smallint. – bteague

+0

Próbowano również ISNULL (CAST (ParentId jako VARCHAR (50)), '') i COALESCE (CAST (ParentId jako VARCHAR (50)), '') – bteague

5

musisz CAST się ParentId jako nvarchar, tak że wyjście jest zawsze ten sam typ danych.

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

Jest to konieczne, ponieważ ParentID pole nie jest varchar/typ nvarchar. To zadziała:

Select ID, IsNull(ParentID,'') from Patients 
Powiązane problemy