Reputation: 133
I have two tables in SQL Server :
Table A
ID Num
11 tj55
4 tj40
Table B
ID NUM A_ID
3 se400 4
5 se500 4
I want to create a stored procedure which will return for each row in A all corresponding rows in B, I want to have this result
NumA NumB
tj40 se400
tj40 se500
Code:
ALTER PROCEDURE [dbo].[Proc]
@param nvarchar(MAX),
AS
BEGIN
SELECT
aa.Num,
bb.Num
FROM
[dbo].[A] as aa
INNER JOIN
[dbo].[B] AS bb ON bb.A_ID = aa.ID
WHERE
aa.Num = @param
ORDER BY
aa.Num
END
This stored procedure works fine and returns exactly what I need but when I add the OUTPUT
parameters (which I need)
ALTER PROCEDURE [dbo].[Proc]
@param nvarchar(MAX),
@RET1 varchar(MAX) OUTPUT,
@RET2 nvarchar(MAX) OUTPUT
AS
BEGIN
SELECT
@RET1= aa.Num,
@RET2 = bb.Num
FROM
[dbo].[A] as aa
INNER JOIN
[dbo].[B] AS bb ON bb.A_ID = aa.ID
WHERE
aa.Num = @param
ORDER BY
aa.Num
END
I have only one row as result
NumA NumB
tj40 se400
Thank you very much
Upvotes: 0
Views: 2624
Reputation: 1270843
A stored procedure only returns scalar values, not rows. It will print the results of a query, but a user-defined inline table function is better:
CREATE FUNCTION [dbo].[ProcFunc] (
@param nvarchar(MAX)
)
RETURNS table
AS
RETURN (SELECT aa.Num, bb.Num
FROM [dbo].[A] aa INNER JOIN
[dbo].[B] bb
ON bb.A_ID = aa.ID
WHERE aa.Num = @param
ORDER BY aa.Num
);
You can then call it as:
select *
from dbo.ProcFunc('abc');
Upvotes: 1