2012-12-31 19 views
10

mam procedurę przechowywaną z następującymi parametramiPrzełęcz wybierz wynik jako parametr procedury przechowywanej

CREATE PROCEDURE [dbo].[SaveData] 
-- Add the parameters for the stored procedure here 

@UserID varchar(50), 
@ServiceID varchar(50), 
@param1 varchar(50), 
@param2 varchar(50), 
@endDate datetime 
    . 
    . 
    -- my code -- 

Chcę wiedzieć, czy jest możliwe, aby przekazać jako parametr select wynik:

exec SaveDate (SELECT player.UserID,player.ServiceID, 'no','no',GETDATE() 
      FROM player) 

I próbował czegoś takiego, ale nie działa.

+3

Nie, to niemożliwe. –

+0

wykonaj procedurę z wybraną instrukcją i uderz SaveData przy każdej zmianie kursora. To byłby najłatwiejszy sposób. Ale zauważ, że kursor jest zabójcą preformancji. –

Odpowiedz

3

Zapytanie SELECT, które napisałeś w swoim przykładzie, prawdopodobnie spowodowałoby powrót wielu wierszy (twój WYBÓR nie zawiera klauzuli WHERE lub TOP (n)). Jeśli Twoim zamiarem jest, aby twoja procedura obejmowała "tabelaryczny" zestaw parametrów, z SQL Server 2008, możesz użyć parametrów wycenianych w tabeli.

Wymaga to utworzenia tabeli tabeli zdefiniowanej przez użytkownika i prawie niewątpliwie oznacza dostosowanie logiki do procedury przechowywanej.

Nadzieja to pomaga :)

Zobacz http://msdn.microsoft.com/en-us/library/bb510489(SQL.100).aspx aby uzyskać więcej informacji.

9

1.One sposobem jest:
a) zadeklarować zmienne
b) Przypisanie wartości do nich za pomocą jednego select
c) Wykonaj procedurę przechodząc zmienne lokalne

DECLARE @param1 <DATATYPE>, @param2 <DATATYPE>, ... 

SELECT @param1 = col1, @param2 = col2, ... 
FROM TABLE1 
WHERE <where_clause> 

EXEC SaveDate @param1, @param2, ... 

2. Innym sposobem jest zdefiniowanie własnego typu tabeli, wypełnienie go i przekazanie do procedury. Wymaga to jednak niewielkiej zmiany procedury składowanej (na liście typów niestandardowy typ powinien być następujący: READONLY):

CREATE TYPE [dbo].[TYPENAME] AS TABLE(
    [ID] [int] NOT NULL, 
    ... 
) 
GO 

DECLARE @myTypeVar TYPENAME; 

INSERT @myTypeVar 
SELECT col1, col2, ... 
FROM TABLE1 

EXEC SaveData @myTypeVar 
Powiązane problemy