Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FabianoSouza

Passar "array" para variável numa SP

Recommended Posts

Tenho essa SP criada com ajuda dos colegas do fórum. Ela está funcionando.

 

Agora preciso acrescentar outra saída para ler na aplicação.

Porém, preciso ter uma espécie de array com os valores de uma das colunas da tabela temporária (#del_ItensTabPrincipal)

ou da tabela física mesmo (tabPrincipal).

 

Se eu definir o valor de uma variável (devidamente declarada) como o resultado de um SELECT,

Set @NomeArquivo = (SELECT CampoQuePreciso FROM #del_ItensTabPrincipal)

ocorre erro,

 

"A subconsulta retornou mais de 1 valor.

Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão."

 

Abaixo a SP (que está funcionando) na íntegra

USE [banco]
GO
/****** Object:  StoredProcedure [dbo].[minha_sp]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[minha_sp] @IdItem Int, @CodServ Int, @respostaSP VARCHAR(200) OUTPUT
AS
BEGIN TRANSACTION
IF object_id('tempdb..#del_ItensTabPrincipal') IS NOT NULL 
BEGIN 
DROP TABLE #del_ItensTabPrincipal  
END 
SELECT Sel.idTabPrincipal AS PK 
INTO #del_ItensTabPrincipal  
FROM tabPrincipal AS Sel 
LEFT OUTER JOIN 
tabSecundaria 
ON 
Sel.idTabPrincipal = tabSecundaria.FK 
WHERE  
Sel.idTabPrincipal =  @IdItem 

DELETE 
tabPrincipal 
FROM 
tabPrincipal AS C INNER JOIN #del_ItensTabPrincipal AS DelCurso 
ON 
C.idTabPrincipal = DelCurso.PK 

DELETE 
tabSecundaria 
FROM 
tabSecundaria AS M 
INNER JOIN  
#del_ItensTabPrincipal AS DelMod 
ON  
M.FK = DelMod.PK 

DELETE
FROM tabAuxiliar
WHERE CodReg = @IdItem
AND
cds = @CodServ

IF(@@error = 1)
BEGIN
ROLLBACK TRANSACTION 
SET @respostaSP ='Desculpe, ocorreu um erro. A operação não pôde ser realizada.' 
PRINT @respostaSP
RETURN
END
SET @respostaSP ='Operação bem-sucedida.' 
COMMIT TRANSACTION

Valew!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, Fabiano! tranquilo?

 

Crie um tipo de dados do tipo tabela já definindo o nome da coluna e use esse tipo no parâmetro da sua procedure, fiz um exemplo pra te explicar melhor.

 

 

--Exemplo da criação de um tipo tabela com coluna definida
create type dbo.ty_table as table (texto varchar(100))
go
--Exemplo da criação da procedure que recebe uma tabela como parametro
create procedure dbo.prc_recebetabela ( @arquivos ty_table readonly)
as
begin
-- realiza o tratamento que quiser com o texto
create table #arquivos (arquivos varchar(100))
insert into #arquivos select * from @arquivos
select * from #arquivos
end
go
--exemplo da execução da procedure
declare @parametro ty_table
insert into @parametro select top 4 name+'.txt' from sys.databases -- select do que busca os parametros necessários
exec dbo.prc_recebetabela @arquivos = @parametro
go
--drop procedure prc_recebetabela
--go
--drop type ty_table
----------------------
Se precisar de ajuda pra adaptar sua procedure, só entrar em contato.
Abraço,
Diémerson S. Campos

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.