使用 coalesce 进行内部连接的存储过程

Stored procedure with inner join using coalesce

我有一个简单的 table tblAllUsers,它存储用户 ID 的简单值,如姓名、出生日期等。

另一个 table tblInterest 存储一个 UserId.Here 的兴趣,一个用户可能有任意数量的兴趣,并且分别存储在单独的行中:

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

所以当我想显示特定用户的兴趣集时,我使用以下查询:

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

现在,想要显示来自这两个 table 的用户信息,其中兴趣 (S) 显示在一个字符串中。

我试过以下方法;

 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

抛出异常"A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations."

前阵子我遇到了类似的问题,SQL STUFF 的一点魔法帮助了 - 也许它对你也有用。

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 

希望对您有所帮助 - 如需更多阅读,请查看:https://msdn.microsoft.com/en-us/library/ms188043.aspx