您好我已经创建了一个表格,其中我存储了某些人的名字,姓氏和电子邮件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的新手,我无法弄清楚如何实现这一目标。请帮助任何建议或一些可以指导我正确方向的链接。 感谢!!!
答案 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