Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia,
Senhores.
Preciso de auxilo para executar a seguinte consulta sql, porém de forma dinâmica.
Alguém pode me ajudar ?
select * from fn_ValorDevolver(1,'000309','0015','00',GETDATE())
1 = codigo da empresa fixo
000309 = grupo existe vários
0015 = número do participante = existe vários
getdate() = data base
Nossa...
Que coisa complicada rs
eu esperava algo mais fácil.
Tipo...
select * from fn_ValorDevolver(select a.id_empresa,a.cd_cota,a.cd_cota,a.versao,getdate() from conbi001 as a where id_grupo in ('300','315'))
Neste caso utilizar um sub select para pegar os dados e passar com parâmetro, porém, não executa. :wacko:Mais facil tipo.... o primeiro exemplo, com cross apply?
select
*
from tabela1
cross apply dbo.fn_valordevolver(empresa,grupo,numero,getdate())
que no seu caso ficaria tipo
select
*
from conbi001
cross apply fn_ValorDevolver (id_empresa, cd_cota, versao, getdate()).....
coloquei os * pq não sei os nomes das colunas que sua função retorna
Abraço!
Valeu Diemerson.
Deu certo.
Fala, Tanaka! tranquilão?
Cara fiz alguns exemplos ai... olha se algum te atende...
qualquer coisa, só entrar em contato!
abraço!
use tempdb
go
----------------------------------------------------------------------------------------------
-- Criando dos objetos aleatorios para testes malucos
----------------------------------------------------------------------------------------------
if object_id('tabela1') is not null
drop table tabela1
if object_id('fn_valordevolver') is not null
drop function fn_valordevolver
go
create table tabela1 (empresa int, grupo char(6), numero char(4), valortotal money, datacontrato datetime)
go
return endcreate function dbo.fn_valordevolver (@empresa int, @grupo char(6), @numero char(4), @data datetime)
returns @tabela table
(
parcela1 money,
parcela2 money,
parcela3 money
)
as
begin
declare @valorparcela money
----------------------------------------------------------------------------------------------
-- Populando objetos pra teste
----------------------------------------------------------------------------------------------
go
----------------------------------------------------------------------------------------------
-- testando com cross apply
----------------------------------------------------------------------------------------------
from tabela1
cross apply dbo.fn_valordevolver(empresa,grupo,numero,getdate())
go
----------------------------------------------------------------------------------------------
-- testando apenas a função com script dinamico maluco
----------------------------------------------------------------------------------------------
declare @cmd varchar(max)
set @cmd = ''
set @cmd = left(@cmd,len(@cmd)-9)--excluindo o ultimo union all
exec(@cmd)
go
----------------------------------------------------------------------------------------------
-- testando apenas a função com script dinamico maluco jogando resultado pra uma tabela
----------------------------------------------------------------------------------------------
declare @cmd varchar(max)
declare @tabela table(
primeiraparcela money,
dataprimeiraparcela datetime,
segundaparcela money,
datasegundaparcela datetime,
terceiraparcela money,
dataterceiraparcela datetime
)
set @cmd = ''
from dbo.fn_valordevolver('+convert(varchar,empresa)+','''+grupo+''','''+numero+''',getdate())'+char(10)
go
----------------------------------------------------------------------------------------------
-- Cursor -- menos indicado
----------------------------------------------------------------------------------------------
declare @cmd varchar(max)
declare @tabela table(
primeiraparcela money,
segundaparcela money,
terceiraparcela money
)
declare
@empresa int,
@grupo char(6),
@numero char(4)
declare executafuncao cursor for
select empresa, grupo, numero from tabela1
open executafuncao
fetch next from executafuncao into @empresa, @grupo, @numero
while @@fetch_status = 0
begin
insert into @tabela select * from dbo.fn_valordevolver(@empresa,@grupo,@numero,getdate())
fetch next from executafuncao into @empresa, @grupo, @numero
end
close executafuncao
deallocate executafuncao
select * from @tabela
go
if object_id('tabela1') is not null
drop table tabela1
if object_id('fn_valordevolver') is not null
drop function fn_valordevolver