Vivek S Kale Ответов: 6

Как вернуться из хранимой процедуры SQL


I have a stored proc named A
which is returning result as 
		select '1' as 'id', 'success' as description
		
I am calling this Proc from another proc named B
		I want to collect this result of A
		
		How do i do it?


Что я уже пробовал:

Я сделал много поисков в google, но не нашел соответствующего ответа

Afzaal Ahmad Zeeshan

Итак, это сработало?

Vivek S Kale

нет

6 Ответов

Рейтинг:
2

manu_dhobale

CREATE PROCEDURE [dbo].[ProcA] 	
AS
BEGIN	
	SET NOCOUNT ON;    
	select 1 as 'id', 'success' as description
END

CREATE TABLE [dbo].[SampleData](
	[id] [int] NULL,
	[description] [varchar](50) NULL
)

CREATE PROCEDURE [dbo].[ProcB] 	
AS
BEGIN	
	SET NOCOUNT ON;
    Insert into SampleData exec ProcA
END

Для получения более подробной информации обратитесь к Можно ли передать таблицу в качестве выходного параметра в хранимой процедуре[^]


Рейтинг:
2

jamuro77

Привет, Вивек, с моей точки зрения, вставка данных непосредственно из выходных данных хранимой процедуры во временные таблицы-плохая практика. Это связано с тем, что в данном случае вы должны знать, что каждый раз, когда вы обновляете выходные данные вашей хранимой процедуры (например, добавляя или удаляя новые столбцы), вы должны обновлять структуру временных таблиц во всех других процедурах, которые ее вызывают. Если нет, то будет выдана ошибка из-за различных столбцов в таблице temp и выходных данных хранимой процедуры.

Поэтому я бы рекомендовал вам, если это возможно, преобразовать хранимую процедуру в табличнозначную функцию и, наконец, вставить данные в другие процедуры, использующие эту функцию.

Наконец, вы можете вызвать функцию, написав "select * into #tempTable from function(params)" или предварительно создав табличную переменную и затем вставив в нее данные. В этом последнем случае рекомендуется указать все столбцы в коде, как в операторе "insert", так и в операторе" select", стараясь избежать массового использования оператора"*".


С уважением.


Рейтинг:
1

$*Developer - Vaibhav*$

Создайте SP и добавьте следующий скрипт

INSERT INTO #tab EXEC Procedure


и выберите * из вкладки #


Рейтинг:
1

gregorio89

вы должны вернуть удостоверение личности и описание?
потому что лучший способ-это вернуть только идентификатор столбца.

DECLARE	@id int

EXEC	@id = [dbo].[sp_your_proc]

Очевидно, что вы должны использовать предложение return в sp_your_proc.
дайте мне знать, если это поможет


Рейтинг:
0

StackQ

DECLARE @ParmDefinition nvarchar(500)=N'@retvalOUT VARCHAR(500) OUTPUT',@retval VARCHAR(500) 

DECLARE @SqlTxt NVARCHAR(MAX)='Put your SQL Query here';

EXECUTE sp_executesql @SqlTxt, @ParmDefinition, @retvalOUT=@retval OUTPUT;
Select @retval;  --It worked for me to get output


Вы можете изменить его в соответствии с вашими требованиями


Рейтинг:
0

Er. Neel Kamal

CREATE TABLE #TEMP( -- Create a temp table with same definition
	[id] [int],
	[description] [varchar](MAX) 
)
Insert into #TEMP   -- Inserting the data returned from Proc A
exec ProcA <parameters...>

SELECT * FROM #TEMP -- Read the data like this wherever you need. 
DROP TABLE #TEMP   -- you can drop at last


Если вы действительно не хотите создавать временную таблицу из-за ее динамического определения столбца. затем следует попробовать нижеприведенную ссылку, которая не рекомендуется .
Кликните сюда