it-swarm.com.de

Wie wird die Ausgabe einer gespeicherten Prozedur in eine Variable im SQL-Server zurückgegeben?

Ich möchte eine gespeicherte Prozedur in SQL Server ausführen und die Ausgabe einer Variablen zuweisen (gibt einen einzelnen Wert zurück)?

50
Adham

Das hängt von der Art der Informationen ab, die Sie zurückgeben möchten.

Wenn es sich um einen einzelnen ganzzahligen Wert handelt, können Sie die return-Anweisung verwenden

 create proc myproc
 as 
 begin
     return 1
 end
 go
 declare @i int
 exec @i = myproc

Wenn Sie einen nicht ganzzahligen Wert oder mehrere Skalarwerte haben, können Sie Ausgabeparameter verwenden

create proc myproc
  @a int output,
  @b varchar(50) output
as
begin
  select @a = 1, @b='hello'
end
go
declare @i int, @j varchar(50)
exec myproc @i output, @j output

Wenn Sie ein Dataset zurückgeben möchten, können Sie insert exec verwenden.

create proc myproc
as 
begin
     select name from sysobjects
end
go

declare @t table (name varchar(100))
insert @t (name)
exec myproc

Sie können sogar einen Cursor zurückgeben, aber das ist einfach schrecklich, also gebe ich kein Beispiel :)

103
podiluska

Sie können die Anweisung return in einer gespeicherten Prozedur verwenden, um einen Ganzzahlstatuscode (und nur einen Ganzzahlentyp) zurückzugeben. Konventionell wird ein Rückgabewert von Null für den Erfolg verwendet.

Wenn keine return explizit festgelegt ist, gibt die gespeicherte Prozedur Null zurück.

   CREATE PROCEDURE GetImmediateManager
      @employeeID INT,
      @managerID INT OUTPUT
   AS
   BEGIN
     SELECT @managerID = ManagerID 
     FROM HumanResources.Employee 
     WHERE EmployeeID = @employeeID

     if @@rowcount = 0 -- manager not found?
       return 1;
   END

Und du nennst es so:

DECLARE @return_status int;
DECLARE @managerID int;

EXEC @return_status = GetImmediateManager 2, @managerID output;
if @return_status = 1
  print N'Immediate manager not found!';
else 
  print N'ManagerID is ' + @managerID;
go

Sie sollten den Rückgabewert nur für Statuscodes verwenden. Um Daten zurückzugeben, sollten Sie Ausgabeparameter verwenden.

Wenn Sie ein Dataset zurückgeben möchten, verwenden Sie einen Ausgabeparameter vom Typ cursor.

mehr zur RETURN-Anweisung

10
Jose Rui Santos

Verwenden Sie diesen Code, richtig funktionieren

CREATE PROCEDURE [dbo].[sp_delete_item]
@ItemId int = 0
@status bit OUT

AS
Begin
 DECLARE @cnt int;
 DECLARE @status int =0;
 SET NOCOUNT OFF
 SELECT @cnt =COUNT(Id) from ItemTransaction where ItemId = @ItemId
 if(@cnt = 1)
   Begin
     return @status;
   End
 else
  Begin
   SET @status =1;
    return @status;
 End
END

Ausführen von SP

DECLARE @statuss bit;
EXECUTE  [dbo].[sp_delete_item] 6, @statuss output;
PRINT @statuss;
3
Dinesh Vaitage

Mit der Return-Anweisung aus dem proc musste ich die temporäre Variable zuweisen und an eine andere gespeicherte Prozedur übergeben. Der Wert wurde gut zugewiesen, aber als er als Parameter übergeben wurde, verlor er den Wert. Ich musste eine temporäre Tabelle erstellen und die Variable aus der Tabelle setzen (SQL 2008)

From this: 
declare @anID int
exec @anID = dbo.StoredProc_Fetch @ID, @anotherID, @finalID
exec dbo.ADifferentStoredProc @anID (no value here)

To this:
declare @t table(id int) 
declare @anID int
insert into @t exec dbo.StoredProc_Fetch @ID, @anotherID, @finalID
set @anID= (select Top 1 * from @t)
0
Bindum