如何从满足条件的存储过程返回多个varchar

时间:2014-08-06 08:13:02

标签: sql sql-server stored-procedures

您好我已经创建了一个表格,其中我存储了某些人的名字,姓氏和电子邮件ID。

表格如下:

create table frnds
(
id int Primary Key,
firstName varchar (20) not null,
lastName varchar (20) not null,
emailID varchar (30)not null
)

我必须编写一个存储过程,以便在与输入“姓氏”值匹配的地方返回表中的“名字”值。 我有一些常用姓氏的名字。所以我希望将所有名字作为存储过程的输出。

我使用以下代码执行此操作,但只能获得一个匹配的名字作为输出。

Create Procedure GetFirstName
(
@lastName varchar(20),
@firstName varchar(20) OUT
)
AS 
Begin
Select @firstName = firstName from frnds where lastName = @lastName
End

这也是我显示结果的方式:

declare @LastName varchar (20)
Exec GetFirstName Daniels, @LastName output 
select @LastName

我知道这是因为我有输出参数,只能保存一个匹配的名字。由于我是SQL的新手,我无法弄清楚如何实现这一目标。请帮助任何建议或一些可以指导我正确方向的链接。 感谢!!!

4 个答案:

答案 0 :(得分:1)

您可以使用临时表来存储varchars。

首先创建这样的程序:

Create table #temp
(
  fisrtName varchar(20) not null
)
go
Create Procedure GetFirstName
(
@lastName varchar(20)
-- , @firstName varchar(20) OUT with my solution you don't need it
)
AS 
Begin
insert into  #temp
Select firstName from frnds where lastName = @lastName
End
go
drop table #temp

然后你可以使用它如下

Create table #temp
(
  fisrtName varchar(20) not null
)
exec  GetFirstName 'Daniels'
select * from #temp

答案 1 :(得分:0)

试试这个

Create Procedure GetFirstName
(
@lastName varchar(20),
@firstName varchar(20) OUT
)
AS 
Begin
Select  firstName from frnds where lastName = @lastName
End

Create table #lastname(lastname varchar (20))
Insert into #lastname
Exec GetFirstName 'Daniels'
select * from #lastname

答案 2 :(得分:0)

CREATE FUNCTION [myschema].[returnLastNames]
(
    @lastName varchar(20),
)
RETURNS TABLE
AS
    RETURN SELECT firstName from frnds where lastName = @lastName;

这里的功能可能更好吗?

像f.ex一样使用它:

SELECT * FROM myschema.returnLastNames('Stevensson');

答案 3 :(得分:0)

IF OBJECT_ID('usp_GetFirstName', 'P') IS NOT NULL
    DROP PROCEDURE usp_GetFirstName;
GO

Create Procedure usp_GetFirstName
(
@lastName varchar(20),
@firstName varchar(20) OUTPUT
)
AS 
Begin
  SET NOCOUNT ON;
Select @firstName = firstName from frnds where lastName = @lastName;
RETURN
End
GO 

DECLARE @Person varchar(20);

EXECUTE usp_GetFirstName
N'Daniels',@lastName = @Person OUTPUT;
PRINT 'LAST NAme IS' + @Person;
GO