it-swarm.com.de

SELECT für gespeicherte Prozedur SQL Server

Ist SELECT Val from storedp_Value im Abfrage-Editor von SQL Server Management Studio möglich?

UPDATE

Ich habe versucht, eine temporäre Tabelle zu erstellen, aber es schien nicht zu funktionieren, weshalb ich hier gefragt habe.

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

Gespeicherte Prozedur UpdateBatch

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

Was mache ich falsch und wie nenne ich es vom Abfragefenster aus?

UPDATE # 2

Ok, ich würde gerne Hilfe in dieser Richtung, Richtung oder irgendetwas schätzen - das ist es, was ich erreichen möchte.

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

Dies ist Teil einer größeren Auswahlanweisung. Jede Hilfe wäre sehr dankbar. Im Wesentlichen ist diese SQL defekt, da wir für Oracle migriert haben.

9
Nathan

Nun, nein. Um aus einer gespeicherten Prozedur auszuwählen, können Sie Folgendes tun:

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

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

Wenn Sie die Ergebnisse einer gespeicherten Prozedur auf diese Weise verwenden, und Sie die gespeicherte Prozedur geschrieben haben, sollten Sie den Code ernsthaft ändern, um den Code als Ansicht oder benutzerdefinierte Funktion zu ändern. In vielen Fällen können Sie solchen Code durch ein einfacheres, besser geeignetes Konstrukt ersetzen.

13
Gordon Linoff

Dies ist in SQL Server nicht möglich, Sie können die Ergebnisse in eine temporäre Tabelle einfügen und diese anschließend abfragen

CREATE TABLE #temp ( /* columns */ )

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

SELECT * FROM #temp
WHERE 1=1

DROP TABLE #temp

Oder Sie können OPENQUERY verwenden, dies erfordert jedoch die Einrichtung eines Verbindungsservers

SELECT * FROM (ThisServer, 'Database.Schema.ProcedureName <params>')
5
T I

Der beste Artikel (meiner Meinung nach) über alle möglichen Methoden zum Teilen von Daten zwischen gespeicherten Prozeduren in SQL Server finden Sie hier: http://www.sommarskog.se/share_data.html

1

Versuche dies

'Rückkehr' ändern

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

auswählen'

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

Ich MUSS etwas vermissen.

Da Ihre gespeicherte Prozedur keine Ergebnismenge zurückgibt und stattdessen eine Ganzzahl zurückgibt, die die RETURN-Funktion der gespeicherten Prozeduren verwendet, können Sie einfach KEINE EINFÜGEN in ANY-Tabelle (da keine Ergebnismenge zurückgegeben wird).

ABER Sie können den Rückgabewert einfach in einer lokalen Variablen speichern (vorausgesetzt, dass dies iterativ und nicht über einem Satz geschieht) und den Wert dieser Variablen in die Tabelle einfügen, die erforderlich ist.

Wenn Sie jedoch einfach den Wert in den Ergebnissen eines Abfragefensters in SSMS zurückgeben möchten, ist das Ausführen von INSERT und SELECTING ein Overkill .. _. Es scheint mir, als würde dies ausreichen (in einem Abfragefenster):

DECLARE @RetVal INT = 0;

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

Wenn dies weit von der Basis entfernt ist, geben Sie bitte die DDL für "batchno_seq" an, vielleicht kann ich auf diese Weise besser helfen.

Prost!

0
Steve Rowland

Mein Ansatz 

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