Angeben der Richtung eines Parameters
Aktualisiert: 17. Juli 2006
Ein Parameter kann entweder ein- oder auswärts gerichtet sein; im ersten Fall wird ein Wert an den Eingabeparameter übergeben, im zweiten Fall gibt die gespeicherte Prozedur über einen Ausgabeparameter einen Wert an das aufrufende Programm zurück. Standardmäßig wird ein Eingabeparameter verwendet.
Um einen Ausgabeparameter anzugeben müssen Sie das OUTPUT-Schlüsselwort in der Definition des Parameters in der gespeicherten Prozedur angeben. Die gespeicherte Prozedur gibt den aktuellen Wert des Ausgabeparameters an das aufrufende Programm zurück, wenn die gespeicherte Prozedur beendet wird. Um den Wert des Parameters in einer Variablen zu speichern, die in dem aufrufenden Programm verwendet werden kann, muss das aufrufende Programm beim Ausführen der gespeicherten Prozedur ebenfalls das OUTPUT-Schlüsselwort verwenden. Weitere Informationen finden Sie unter Zurückgeben von Daten mithilfe von OUTPUT-Parametern.
Beispiele
Im nachfolgenden Beispiel wird die gespeicherte Production.usp
_GetList
-Prozedur erstellt, von der eine Liste der Produkte zurückgegeben wird, deren Preis einen angegebenen Betrag nicht übersteigt. In dem Beispiel wird die Verwendung mehrerer SELECT-Anweisungen und mehrerer OUTPUT-Parameter dargestellt. OUTPUT-Parameter ermöglichen einer externen Prozedur, einem Batch oder mehreren Transact-SQL-Anweisungen während dem Ausführen der Prozedur den Zugriff auf einen Satz von Werten.
USE AdventureWorks;
GO
IF OBJECT_ID ( 'Production.uspGetList', 'P' ) IS NOT NULL
DROP PROCEDURE Production.uspGetList;
GO
CREATE PROCEDURE Production.uspGetList @Product varchar(40)
, @MaxPrice money
, @ComparePrice money OUTPUT
, @ListPrice money OUT
AS
SET NOCOUNT ON;
SELECT p.[Name] AS Product, p.ListPrice AS 'List Price'
FROM Production.Product AS p
JOIN Production.ProductSubcategory AS s
ON p.ProductSubcategoryID = s.ProductSubcategoryID
WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice;
-- Populate the output variable @ListPprice.
SET @ListPrice = (SELECT MAX(p.ListPrice)
FROM Production.Product AS p
JOIN Production.ProductSubcategory AS s
ON p.ProductSubcategoryID = s.ProductSubcategoryID
WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice);
-- Populate the output variable @compareprice.
SET @ComparePrice = @MaxPrice;
GO
Mit usp_GetList
wird eine Liste mit Adventure Works-Produkten (Fahrrädern) zurückgegeben, die weniger als 700 $ kosten. Die OUTPUT-Parameter @cost und @compareprices werden mit der Control-of-flow-Sprache verwendet, um eine Meldung im Fenster Meldungen zurückzugeben.
Hinweis: |
---|
Die OUTPUT-Variable muss sowohl beim Erstellen der Prozedur als auch beim Verwenden der Variable definiert werden. Parametername und Variablenname brauchen nicht übereinzustimmen. Jedoch müssen der Datentyp und die Position des Parameters übereinstimmen, es sei denn, es wird @listprice= variable verwendet. |
DECLARE @ComparePrice money, @Cost money
EXECUTE Production.uspGetList '%Bikes%', 700,
@ComparePrice OUT,
@Cost OUTPUT
IF @Cost <= @ComparePrice
BEGIN
PRINT 'These products can be purchased for less than
$'+RTRIM(CAST(@ComparePrice AS varchar(20)))+'.'
END
ELSE
PRINT 'The prices for all products in this category exceed
$'+ RTRIM(CAST(@ComparePrice AS varchar(20)))+'.'
Im Folgenden wird ein Teil des Resultsets aufgeführt:
Product List Price
-------------------------------------------------- ------------------
Road-750 Black, 58 539.99
Mountain-500 Silver, 40 564.99
Mountain-500 Silver, 42 564.99
...
Road-750 Black, 48 539.99
Road-750 Black, 52 539.99
(14 row(s) affected)
These items can be purchased for less than $700.00.
Siehe auch
Konzepte
Angeben eines Parameternamens
Angeben eines Parameterdatentyps
Angeben eines Standardwertes für einen Parameter
Andere Ressourcen
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version | Verlauf |
---|---|
17. Juli 2006 |
|