Procédure stockée avec jointure interne utilisant coalesce

J'ai une table simple tblAllUsers qui stocke des valeurs simples comme le nom, la date de naissance etc. d'un UserId.

Une autre table tblInterest stocke les intérêts d'un UserId. Un user peut avoir n'importe quel nombre d'intérêt et sont stockés séparément dans des lignes séparées:

Create table tblInterest ( Id int primary key identity, UserId varchar(10), InterestId int, Interest varchar(20) ) 

Donc, quand je veux afficher set l'set d'intérêt d'un user particulier, j'utilise la requête ci-dessous:

 DECLARE @listStr VARCHAR(MAX) SELECT @listStr = COALESCE(@listStr + ', ' ,'') + Interest FROM tblInterest where UserId=@UserId SELECT @listStr 

Maintenant, vous voulez afficher une information d'user à partir de ces deux tables où les intérêts (S) sont affichés dans une string.

J'ai essayé le ci-dessous;

  Create proc spPlayersGridview @listStr VARCHAR(MAX) as begin Select tblAllUsers.Category, tblAllUsers.DOB, tblAllUsers.FirstName, tblAllUsers.LastName, tblAllUsers.City, tblAllUsers.State, @listStr = COALESCE(@listStr + ', ' ,'') + tblInterest.Interest from tblAllUsers INNER JOIN tblInterest ON tblAllUsers.UserId=tblInterest.UserId where Category='Player' end 

renvoie une exception "Une instruction SELECT qui affecte une valeur à une variable ne doit pas être combinée avec des opérations de récupération de données."

J'ai eu un problème similaire il y a quelque time, et un peu de magie SQL STUFF aide – Peut-être que cela fonctionnera aussi pour vous.

 CREATE PROC spPlayersGridview AS BEGIN SELECT tblAllUsers.Category , tblAllUsers.DOB , tblAllUsers.FirstName , tblAllUsers.LastName , tblAllUsers.City , tblAllUsers.State , listStr = STUFF(( SELECT ',' + tblInterest.Interest FROM tblInterest WHERE tblAllUsers.UserId=tblInterest.UserId ORDER BY tblInterest.Interest FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') FROM tblAllUsers WHERE Category='Player' END 

J'espère que ça aide – Pour plus de lecture, regardez: https://msdn.microsoft.com/fr-fr/library/ms188043.aspx