sql server - texto - Convertir NULL en cadena vacía: la conversión falló al convertir una cadena de caracteres a un identificador único
separar cadena delimitada por comas en sql server (3)
Usando SQL Server 2005, ¿cómo obtengo la siguiente declaración o, más bien, la salida como quiero que sea?
SELECT Id ''PatientId'',
ISNULL(ParentId,'''') ''ParentId''
FROM Patients
ParenId es un uniqueidentifier
que permite NULL
, pero parece que el optimizador de consultas intenta volver a uniqueidentifier
a uniqueidentifier
para las filas donde ParentId = NULL
. Como dice el título, ¡esa es la información exacta del error que el corredor de consultas lanza a mi cara!
- ¿Cómo consigo que el servidor devuelva una cadena vacía para
ParentId = NULL
ParentId
CAST
el ParentId
como nvarchar
, para que la salida sea siempre el mismo tipo de datos.
SELECT Id ''PatientId'',
ISNULL(CAST(ParentId as nvarchar(100)),'''') ''ParentId''
FROM Patients
SELECT Id ''PatientId'',
ISNULL(CONVERT(varchar(50),ParentId),'''') ''ParentId''
FROM Patients
ISNULL
siempre intenta devolver un resultado que tenga el mismo tipo de datos que el tipo de su primer argumento. Entonces, si quieres que el resultado sea una cadena ( varchar
), asegúrate de que ese sea el tipo del primer argumento.
COALESCE
suele ser una función mejor que ISNULL
, ya que considera todos los tipos de datos de argumentos y aplica las reglas de precedence apropiadas para determinar el tipo de datos resultante final. Desafortunadamente, en este caso, el uniqueidentifier
tiene mayor prioridad que varchar
, por lo que no ayuda.
(También es generalmente preferido porque se extiende a más de dos argumentos)
Select ID, IsNull(Cast(ParentID as varchar(max)),'''') from Patients
Esto es necesario porque el campo ParentID no es de tipo varchar / nvarchar. Esto hará el truco:
Select ID, IsNull(ParentID,'''') from Patients