2013-07-17 14 views
8

SELECT Val from storedp_Value all'interno dell'editor di query di SQL Server Management Studio, è possibile?SELECT rispetto a stored procedure SQL Server

UPDATE

ho cercato di creare una tabella temporanea, ma non sembrano lavorare, quindi, il motivo per cui ho chiesto qui.

CREATE TABLE #Result 
(
batchno_seq_no int 
) 
INSERT #Result EXEC storedp_UPDATEBATCH 
SELECT * from #Result 
DROP TABLE #Result 
RETURN 

Stored procedure UpdateBatch

delete from batchno_seq; 
insert into batchno_seq default values; 
select @batchno_seq= batchno_seq_no from batchno_seq 
RETURN @batchno_seq 

Che cosa sto facendo di sbagliato e Come chiamare dalla finestra di query?

UPDATE # 2

Ok, mi farebbe piacere aiuto su questo, direzione o qualsiasi cosa - questo è quello che sto cercando di realizzare.

select batchno_seq from (delete from batchno_seq;insert into batchno_seq default values; 
select * from batchno_seq) BATCHNO 
INTO TEMP_DW_EKSTICKER_CLASSIC 

Questo fa parte di una dichiarazione di selezione più ampia. Qualsiasi aiuto sarebbe molto apprezzato. Essenzialmente questo SQL è rotto come abbiamo migrato per Oracle.

+3

No, non è possibile. Dovresti usare le funzioni se questo è un requisito. –

+0

@NenadZivkovic Ho bisogno di CANCELLARE e INSERIRE, ma da quello che ho letto non è possibile. – Nate

+0

Oppure puoi usare 'soluzione alternativa' creando la tabella temporanea, inserendo i risultati da SP al suo interno e quindi selezionando dalla tabella temporanea. –

risposta

11

Bene, no. Per selezionare da una stored procedure è possibile effettuare le seguenti operazioni:

declare @t table (
    -- columns that are returned here 
); 

insert into @t(<column list here>) 
    exec('storedp_Value'); 

Se si utilizzano i risultati da una stored procedure in questo modo e hai scritto la stored procedure, seriamente pensare di cambiare il codice per essere una visione o funzione definita dall'utente. In molti casi, è possibile sostituire tale codice con un costrutto più semplice e più adatto.

5

questo non è possibile in SQL Server, è possibile inserire i risultati in una tabella temporanea e quindi ricerca, inoltre, che

CREATE TABLE #temp (/* columns */) 

INSERT INTO #temp (/* columns */) 
EXEC sp_MyStoredProc 

SELECT * FROM #temp 
WHERE 1=1 

DROP TABLE #temp 

Oppure si può utilizzare OPENQUERY ma questo richiede la creazione di un server collegato, l'SQL è

SELECT * FROM (ThisServer, 'Database.Schema.ProcedureName <params>') 
+1

Non è necessario ripetere nuovamente le colonne nella parte "INSERT INTO", SQL riempirà la tabella senza specificarle esplicitamente. – MeanGreen

0

Prova questo

Change 'Return'

delete from batchno_seq; 
insert into batchno_seq default values; 
select @batchno_seq= batchno_seq_no from batchno_seq 
RETURN @batchno_seq 

a 'Seleziona'

delete from batchno_seq; 
insert into batchno_seq default values; 
select @batchno_seq= batchno_seq_no from batchno_seq 
SELECT @batchno_seq 
0

Il mio approccio

select * into new_table from (select t1.col1,t1.col2,.. 
from table1 t1 
union 
select t2.cola,t2.colb,.. 
from table2 t2) as union_table 
1

il miglior articolo (a mio parere) su tutti i possibili metodi per la condivisione dei dati tra le stored procedure in SQL Server si possono trovare qui : http://www.sommarskog.se/share_data.html

0

DEVO mancare qualcosa.

Dal momento che la stored procedure non restituisce un set di risultati, e invece restituisce un intero, utilizzando la funzionalità di RITORNO di stored procedure, semplicemente non può inserire in qualsiasi tabella (dal momento che non c'è alcun set di risultati a tornare, a tutti).

MA, è possibile (supponendo che ciò avvenga in modo iterativo e non su un set), è sufficiente memorizzare il valore restituito in una variabile locale e inserire il valore di tale variabile in qualsiasi tabella sia necessaria.

Tuttavia, se si desidera semplicemente restituire il valore nei risultati di una finestra di query in SSMS, eseguire INSERT e SELECTING è eccessivo. Mi sembra come questo sarebbe sufficiente (in una finestra di query):

DECLARE @RetVal INT = 0; 

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 
BEGIN TRANSACTION; 
EXEC @RetVal = storedp_UPDATEBATCH; 
COMMIT TRANSACTION; 
SELECT @RetVal; 
    --OR 
    --PRINT @RetVal; 

Se questo è il modo di gran lunga fuori dalla base, si prega di fornire il DDL per "batchno_seq", forse posso essere di una migliore assistenza in questo modo.

Cheers!

+0

FTR, concordo con @GordonLinoff, in questo caso la "Procedura memorizzata batch" sarebbe implementata in modo molto più semplice come UDF scalare (anche in questo caso, supponendo che ciò non stia agendo su un SET) –

Problemi correlati