2012-03-29 14 views
25

Utilizando SQL Server 2005, ¿cómo obtengo la instrucción siguiente o más bien la salida como quiero que sea?Conversión de NULL a cadena vacía - Error de conversión al convertir de una cadena de caracteres a uniqueidentifier

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

ParenId es un uniqueidentifier que permite NULL, pero parece que el optimizador de consultas intenta también convertir '' de nuevo a uniqueidentifier de las filas en las que ParentId = NULL .Como dice el título que es la información de error exacto que el corredor consulta arroja a la cara !!

  • ¿Cómo consigo que el servidor devuelva cadena vacía para ParentId = NULL

Respuesta

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

ISNULL siempre trata de devolver un resultado que tiene el mismo tipo de datos como el tipo de su primer argumento. Por lo tanto, si desea que el resultado sea una cadena (varchar), será mejor que se asegure de que ese sea el tipo del primer argumento.


COALESCE es por lo general una mejor función de usar que ISNULL, ya que considera todos tipos de datos argumento y aplica precedence reglas apropiadas para determinar el tipo de datos resultante final. Desafortunadamente, en este caso, uniqueidentifier tiene una precedencia mayor que varchar, por lo que no ayuda.

(También se prefiere en general, ya que se extiende a más de dos argumentos)

+0

gracias por dar más de lo deseado. Aprendí mucho más de su respuesta Lo marcaré como respondí en 4 minutos Greetz – Deeptechtons

+0

@Damien_The_Unbeliever Probé 'COALESCE (CONVERTIR (varchar (50), ParentId),' ')' e 'ISSNULL (CONVERT (varchar (50), ParentId), '') 'y todavía obtengo un cero en lugar de una celda vacía. Mi ParentId es smallint. – bteague

+0

También se intentó ISNULL (CAST (ParentId como VARCHAR (50)), '') y COALESCE (CAST (ParentId como VARCHAR (50)), '') – bteague

5

Es necesario CAST la ParentId como nvarchar, por lo que la salida es siempre el mismo tipo de datos.

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

Esto es necesario porque ParentID campo no es de tipo varchar/nvarchar. Esto hará el truco:

Select ID, IsNull(ParentID,'') from Patients 
Cuestiones relacionadas