2015-10-15 56 views
1

我有一個簡單的表tblAllUsers,它存儲UserId的名稱,出生日期等簡單數值。使用內部連接使用合併的存儲過程

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 [email protected] 
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

刪除您的這部分'tblAllUsers.Category,tblAllUsers.DOB,tblAllUsers.FirstName,tblAllUsers.LastName,tblAllUsers.City,tblAllUsers.State, '從SELECT查詢。 – Abhishek

回答

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

+0

你還應該注意到,他正在試圖返回一個存儲過程中的一個值,他將要麼改變返回類型或使用表值函數 – Wibbler

+0

@Wibbler是的,你是對的,但他的目標是「從這兩個表中顯示用戶信息,其中興趣(S)顯示爲一個字符串」並且可以這樣完成,沒有任何indput變量或表值函數。 –

+0

Worked.Need閱讀這篇文章。感謝ton @ M.Grue – RelatedRhymes

相關問題