使用coalesce的内部联接的存储过程

时间:2015-10-15 10:45:04

标签: sql-server inner-join

我有一个简单的表tblAllUsers,它存储UserId的名称,出生日期等简单值。

另一个表tblInterest存储UserId的兴趣。用户可以拥有任意数量的兴趣并单独存储在不同的行中:

 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

现在,想要显示这两个表中的用户信息,其中兴趣(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

抛出异常"为变量赋值的SELECT语句不能与数据检索操作结合使用。"

1 个答案:

答案 0 :(得分:1)

我有一段时间遇到过类似的问题,而且一些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