2012-03-29 14 views
25

Utilizzo di SQL Server 2005 come ottengo l'istruzione sottostante o piuttosto l'output come voglio che sia.Converti NULL nella stringa vuota - Conversione non riuscita durante la conversione da una stringa di caratteri nell'identificativo univoco

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

ParenId è un uniqueidentifier che permette NULL, ma sembra che Query Optimizer cerca di convertire anche '' tornare a uniqueidentifier per le righe in cui ParentId = NULL .Come il titolo dice che è l'esatto info error il corridore interrogazione getta in faccia !!

  • Come faccio ad avere il server di tornare stringa vuota per ParentId = NULL

risposta

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

ISNULL cerca sempre di restituire un risultato che ha lo stesso tipo di daticome tipo di primo parametro. Quindi, se si desidera che il risultato sia una stringa (varchar), è meglio assicurarsi che sia il tipo del primo argomento.


COALESCE è di solito una funzione meglio usare rispetto ISNULL, in quanto considera tutti i tipi di dati argomento e applica appropriate precedence regole per determinare il tipo di dati risultante finale. Sfortunatamente, in questo caso, uniqueidentifier ha precedenza superiore a varchar, quindi non è di aiuto.

(E 'anche generalmente preferito perché estende per più di due argomenti)

+0

grazie per dare più di voluto. Ho imparato molto di più dalla tua risposta La contrassegnerò come risposta in 4 minuti Greetz – Deeptechtons

+0

@Damien_The_Unbeliever Ho provato 'COALESCE (CONVERT (varchar (50), ParentId),' ')' e 'ISSNULL (CONVERT (varchar (50), ParentId), '') 'e sto ancora ottenendo uno zero invece di una cella vuota. Il mio ParentId è smallint. – bteague

+0

Anche provato ISNULL (CAST (ParentId come VARCHAR (50)), '') e COALESCE (CAST (ParentId come VARCHAR (50)), '') – bteague

5

È necessario CAST la ParentId come nvarchar, in modo che l'uscita è sempre lo stesso tipo di dati.

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

Ciò è necessario perché il campo ParentID non è di tipo varchar/nvarchar. Questo farà il trucco:

Select ID, IsNull(ParentID,'') from Patients 
Problemi correlati