我有一个简单的表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语句不能与数据检索操作结合使用。"
答案 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