web-dev-qa-db-fra.com

Convert NULL en chaîne vide - La conversion a échoué lors de la conversion d'une chaîne de caractères en uniqueidentifier

À 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 !!

  • Comment puis-je obtenir le serveur pour retourner la chaîne vide pour ParentId = NULL
33
Deeptechtons
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)

63
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
8
Sudipto

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
6
Curt