使用 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
我有一个简单的 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