SELECT Val from storedp_Value
dans l'éditeur de requête de SQL Server Management Studio, est-ce possible?
METTRE À JOUR
J'ai essayé de créer une table temporaire mais cela n'a pas semblé fonctionner, c'est pourquoi j'ai posé la question ici.
CREATE TABLE #Result
(
batchno_seq_no int
)
INSERT #Result EXEC storedp_UPDATEBATCH
SELECT * from #Result
DROP TABLE #Result
RETURN
Procédure stockée UpdateBatch
delete from batchno_seq;
insert into batchno_seq default values;
select @batchno_seq= batchno_seq_no from batchno_seq
RETURN @batchno_seq
Qu'est-ce que je fais mal et comment l'appeler depuis la fenêtre de requête?
MISE À JOUR # 2
Ok, je vous serais reconnaissant de l’aide sur ce sujet, direction ou quoi que ce soit - c’est ce que j’essaie de réaliser.
select batchno_seq from (delete from batchno_seq;insert into batchno_seq default values;
select * from batchno_seq) BATCHNO
INTO TEMP_DW_EKSTICKER_CLASSIC
Cela fait partie d'une déclaration select plus grande. Toute aide serait très appréciée. Essentiellement, ce SQL est rompu lors de la migration pour Oracle.
Et bien non. Pour sélectionner une procédure stockée, vous pouvez effectuer les opérations suivantes:
declare @t table (
-- columns that are returned here
);
insert into @t(<column list here>)
exec('storedp_Value');
Si vous utilisez les résultats d'une procédure stockée de cette manière et vous avez écrit la procédure stockée, envisagez sérieusement de modifier le code pour qu'il soit une vue ou une fonction définie par l'utilisateur. Dans de nombreux cas, vous pouvez remplacer ce code par une construction plus simple et mieux adaptée.
Ceci n’est pas possible sur le serveur SQL, vous pouvez insérer les résultats dans une table temporaire, puis interroger
CREATE TABLE #temp ( /* columns */ )
INSERT INTO #temp ( /* columns */ )
EXEC sp_MyStoredProc
SELECT * FROM #temp
WHERE 1=1
DROP TABLE #temp
Ou vous pouvez utiliser OPENQUERY
mais cela nécessite la configuration d’un serveur lié, le SQL est
SELECT * FROM (ThisServer, 'Database.Schema.ProcedureName <params>')
Le meilleur article (à mon avis) sur toutes les méthodes possibles pour partager des données entre procédures stockées dans SQL Server est disponible ici: http://www.sommarskog.se/share_data.html
Essaye ça
Changer 'Retour'
delete from batchno_seq;
insert into batchno_seq default values;
select @batchno_seq= batchno_seq_no from batchno_seq
RETURN @batchno_seq
pour sélectionner'
delete from batchno_seq;
insert into batchno_seq default values;
select @batchno_seq= batchno_seq_no from batchno_seq
SELECT @batchno_seq
J'ai dû louper quelque chose.
Étant donné que votre procédure stockée ne renvoie pas de jeu de résultats et renvoie un entier, à l'aide de la fonctionnalité RETURN des processus stockés, vous NE POUVEZ PAS INSÉRER dans AUCUNE table (car aucun jeu de résultats ne revient, du tout).
MAIS, vous pouvez (en supposant que cela se fasse de manière itérative, et non sur un ensemble) simplement stocker la valeur de retour dans une variable locale et insérer la valeur de cette variable dans la table nécessaire.
Toutefois, si vous souhaitez simplement renvoyer la valeur dans les résultats d'une fenêtre de requête dans SSMS, effectuer les actions INSERT et SELECTING est excessif . Il me semble que CE suffirait (dans une fenêtre de requête):
DECLARE @RetVal INT = 0;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
EXEC @RetVal = storedp_UPDATEBATCH;
COMMIT TRANSACTION;
SELECT @RetVal;
--OR
--PRINT @RetVal;
Si c'est loin de la base, veuillez fournir le DDL pour "batchno_seq", peut-être que je pourrais être d'une meilleure aide de cette façon.
À votre santé!
Mon approche
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