Wie man mehrere Varchar aus einer gespeicherten Prozedur zurückgibt, wo Bedingung erfüllt ist

Hallo ich habe eine Tabelle erstellt, in der ich den Vornamen, den Nachnamen und die E-Mail-ID einiger Personen speichere.

Der Tisch ist wie folgt:

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

Ich muss eine gespeicherte Prozedur schreiben, um die "Vornamen" -Werte aus der Tabelle zurückzugeben, wo immer eine Übereinstimmung mit dem eingegebenen "Nachname" -Wert vorliegt. Ich habe einige der Namen mit gemeinsamen Nachnamen. Also möchte ich alle Vornamen als die Ausgabe der gespeicherten Prozedur haben.

Ich benutze den folgenden Code, um das zu tun, aber in der Lage, nur einen passenden Vornamen als Ausgabe zu bekommen.

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

Auch hier zeige ich das Ergebnis:

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

Ich weiß, dass dies ist, weil ich die Ausgabe-Parameter, so dass es nur einen passenden Vornamen halten kann. Da bin ich neu bei SQL, kann ich nicht herausfinden, wie man das erreicht. Bitte helfen Sie bei jedem Vorschlag oder einem Link, der mich in die richtige Richtung führen kann. Vielen Dank!!!

Sie können temporäre Tabelle verwenden, um die Varchars zu speichern.

Zuerst schaffen Sie Ihre Prozedur wie folgt:

 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 

Dann können Sie es wie unten verwenden

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

Versuche dies

 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 
 CREATE FUNCTION [myschema].[returnLastNames] ( @lastName varchar(20), ) RETURNS TABLE AS RETURN SELECT firstName from frnds where lastName = @lastName; 

Eine function könnte hier vielleicht besser sein?

Benutze es wie f.ex .:

 SELECT * FROM myschema.returnLastNames('Stevensson'); 
 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