2012-12-31 14 views
10

ho una stored procedure con i seguenti parametriselezionare risultato Passo come parametro della stored procedure

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 -- 

vorrei sapere se è possibile passare come parametro di un risultato di selezione:

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

I provato qualcosa di simile, ma non funziona.

+3

No, questo non è possibile. –

+0

crea una procedura con una selezione di stato, e smack SaveData con ogni modifica del cursore. Sarebbe il modo più semplice. Ma prendi nota, il cursore è un killer delle preformance. –

risposta

3

La query SELECT che hai scritto nell'esempio avrebbe probabilmente riportato più righe (la tua SELECT non ha una clausola WHERE o una TOP (n)). Se si intende consentire alla procedura di utilizzare un set di parametri "tabulare", da SQL Server 2008 è possibile utilizzare parametri con valori di tabella.

Ciò comporta la creazione di una tabella di tabella definita dall'utente e quasi indubbiamente significa la regolazione della logica all'interno della stored procedure.

Spero che questo aiuti :)

Vedi http://msdn.microsoft.com/en-us/library/bb510489(SQL.100).aspx per ulteriori informazioni.

9

1.One modo è:
a) dichiarare le variabili
b) assegnare valori a loro con una singola istruzione select
c) Eseguire la procedura passando le variabili locali

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

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

EXEC SaveDate @param1, @param2, ... 

2. Un altro modo è definire il proprio tipo di tabella, riempirlo e passarlo alla procedura. Tuttavia, questo richiede la modifica un po 'la stored procedure (in params Inserisci il tuo tipo personalizzato dovrebbe essere seguita da 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 
Problemi correlati