À l’aide de SQL Server 2005, comment puis-je obtenir l’instruction ci-dessous ou plutôt le résultat tel que je le souhaite?.
SELECT Id 'PatientId',
ISNULL(ParentId,'') 'ParentId'
FROM Patients
ParenId est un uniqueidentifier
qui autorise NULL
, mais il semble que l'optimiseur de requêtes tente également de convertir ''
retour à uniqueidentifier
pour les lignes où ParentId = NULL
_ Comme le titre le dit, c’est l’information exacte sur l’erreur que le coureur de requête jette à ma face !!
ParentId = NULL
SELECT Id 'PatientId',
ISNULL(CONVERT(varchar(50),ParentId),'') 'ParentId'
FROM Patients
ISNULL
essaie toujours de renvoyer un résultat ayant le même type de données que le type de son premier argument . Donc, si vous voulez que le résultat soit une chaîne (varchar
), vous feriez mieux de vous assurer que c'est le type du premier argument.
COALESCE
est généralement une meilleure fonction à utiliser que ISNULL
, car il considère tout argument types de données et applique les règles appropriées priorité pour déterminer le type de données résultant final. Malheureusement, dans ce cas, uniqueidentifier
a une priorité supérieure à varchar
, donc cela n’aide en rien.
(Il est également généralement préféré car il s'étend sur plus de deux arguments)
Select ID, IsNull(Cast(ParentID as varchar(max)),'') from Patients
Cela est nécessaire car le champ ParentID n'est pas de type varchar/nvarchar. Ça fera l'affaire:
Select ID, IsNull(ParentID,'') from Patients
Vous devez CAST
le ParentId
en tant que nvarchar
pour que le résultat soit toujours du même type de données.
SELECT Id 'PatientId',
ISNULL(CAST(ParentId as nvarchar(100)),'') 'ParentId'
FROM Patients