Ir para conteúdo
Fórum Script Brasil
  • 0

Como atribuir o resultado de um select no parametro


Flavio Nascto

Pergunta

Mestres

Bom dia..

Pessoal ... preciso de ajuda..

Eu tenho um campo de uma com diversas datas..

Preciso montar 4 parametros.

1 - contendo a data de um certo select. . 'select data from aluno'

2 - contendo o mes do item 1

3 - contendo o mes anterior (data) ao item 1, ou seja eu preciso colocar no parâmetro a data anterior.

Obs, para cada mes eu só tenho apenas uma data registrada no banco, portanto nunca terei umas de um dia do mes registrado no banco.

4 - Contendo o mes do item 3

SEriam...

DT_REL =

MES_DT_REL =

DT_REL_ANT =

MES_DT_REL_ANT =

Editado por Flavio Nascto
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Eu tenho um campo de uma TABELA com diversas datas..

Preciso montar 4 parametros.

1 - contendo a data de um certo select. . 'select data from aluno'

2 - contendo o mes do item 1

3 - contendo o mes anterior (data) ao item 1, ou seja eu preciso colocar no parâmetro a data anterior.

Obs, para cada mes eu só tenho apenas uma data registrada no banco, portanto nunca terei umas de um dia do mes registrado no banco.

4 - Contendo o mes do item 3

Preciso do seguinte resultado

DT_REL =

MES_DT_REL =

DT_REL_ANT =

MES_DT_REL_ANT =

Perceba que eu preciso dos resultados separado.

O exemplo que você me enviou ta tudo junto...

Link para o comentário
Compartilhar em outros sites

  • 0

você tendo o resultado junto, basta separar e vice-versa.

JUNTO:

select data as DT_REL, Month(dns) as MES_DT_REL, DATEadd(Month, -1, dns) as DT_REL_ANT,

(Month(dns))-1 as MES_DT_REL_ANT from aluno

SEPARADO:

DT_REL = (select data as DT_REL from aluno)

MES_DT_REL = (select Month(dns) as MES_DT_REL from aluno)

DT_REL_ANT = (select DATEadd(Month, -1, dns) as DT_REL_ANT from aluno)

MES_DT_REL_ANT = (select (Month(dns))-1 as MES_DT_REL_ANT from aluno)

OBS: se você criar uma varivável DT_REL, o select tem q retornar apenas 1 valor, ok?

você pode passar os resultados juntos para o aplicativo, e nele separar também.

Link para o comentário
Compartilhar em outros sites

  • 0

Fulvio

Não funciona, vamos la..... vou postar tudo... se prefirir pode colar no query analyzer e testar..

---- Vamos criar as tabelas e as informações da minha dúvida.

CREATE TABLE aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

CREATE TABLE ANALISE(MES int)

--------------- apenas para analisar os dados-------

Select * from aluno

Select * from analise

--DROP TABLE aluno

--DROP TABLE ANALISE

-----------------------------------------------------

-- bom agora que criamos e populamos a tabela vamos a dúvida.

---- Agora vamos ao que não esta funcionando ....

DECLARE @DT_REL (10),

@MES_DT_REL varchar(10),

@DT_REL_ANT varchar(10),

@MES_DT_REL_ANT varchar(4),

@base varchar (1000)

@base = 'analise'

@DT_REL = (select data as DT_REL from aluno)

@MES_DT_REL = (select Month(dns) as MES_DT_REL from aluno)

@DT_REL_ANT = (select DATEadd(Month, -1, dns) as DT_REL_ANT from aluno)

@MES_DT_REL_ANT = (select (Month(dns))-1 as MES_DT_REL_ANT from aluno)

Print @DT_REL

Print @MES_DT_REL

Print @DT_REL_ANT

Print @MES_DT_REL_ANT

--- Eu preciso dar un insert into com o mes na tabela analise, porém,

--- a premissa é resultado do parametro para incluir na tabela

--- eis abaixo uma parte do que preciso realizar

Insert into @base(mes) values (MES_DT_REL)

Select top 10 @MES_DT_REL from @base

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Flávio,

Segue o script com as alterações. Coloca no Query Analyzer e vai rodando passo a passo pra entender. Se tiver alguma dúvida, posta aí...

---- Vamos criar as tabelas e as informações da minha dúvida.

CREATE TABLE dbo.aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

CREATE TABLE dbo.ANALISE(MES int)

--------------- apenas para analisar os dados-------

Select * from aluno

Select * from analise

--DROP TABLE aluno

--DROP TABLE ANALISE

-----------------------------------------------------

-- bom agora que criamos e populamos a tabela vamos a dúvida.

---- Agora vamos ao que não esta funcionando ....

-- alterei os tipos das variáveis

DECLARE @DT_REL datetime,

@MES_DT_REL varchar(2),

@DT_REL_ANT datetime,

@MES_DT_REL_ANT varchar(2),

-- como você declarou uma variável, você só poderá atribuir 1 valor à variável.... Por isso q coloquei top 1

set @DT_REL = (select top 1 DT_REL from aluno)

set @MES_DT_REL = (select top 1 Month(DT_REL) from aluno)

set @DT_REL_ANT = (select top 1 DATEadd(Month, -1, DT_REL) from aluno)

set @MES_DT_REL_ANT = (select top 1 (Month(DT_REL))-1 from aluno)

-- o Print agora vai sair ok.

Print @DT_REL

Print @MES_DT_REL

Print @DT_REL_ANT

Print @MES_DT_REL_ANT

--- Eu preciso dar un insert into com o mes na tabela analise, porém,

--- a premissa é resultado do parametro para incluir na tabela

--- eis abaixo uma parte do que preciso realizar

-- Assim não funciona

Insert into @base(mes) values (MES_DT_REL)

Select top 10 @MES_DT_REL from @base

-- você quer referenciar a tabela dinamicamente: passar o nome da tabela pela variável

-- e acessa-la. Desta forma, o SQL não entende que dentro da variável contém o nome da tabela q pretende

-- acessar. Ele espera o nome de uma tabela, não uma variável.

-- Se você quiser fazer a inserção de todos os dados, você não precisará da criação de variáveis pra isso.

-- Vou dar um exemplo abaixo utilizando a tabela q passou de exemplo.

-- passei a declaração de variavel pra cá.

declare @base varchar (1000)

set @base = 'analise'

-- você tem q montar o script se quiser passar o nome da tabela dinamicamente.

Declare @Script varchar(100)

set @Script = 'insert into ' + @base + ' (MES) Select top 10 Month(DT_REL) from aluno'

-- Select pra saber como o script ficou.

select @Script

-- A inserção não será realizada de 1 registro, mas sim de todos os registros. Desta

-- forma, não será necessário utilizar as variáveis declaradas no começo do script.

-- Executa o script montado na variável.

exec (@Script)

-- Verifica os dados gravados.

select * from analise

Link para o comentário
Compartilhar em outros sites

  • 0

Fulvio...

Ola bom dia....

Entendi... mas continuo sem os parametros de mes...

---------------------------------------------------------------------------------------------------

---- Vamos criar as tabelas e as informações da minha dúvida.

CREATE TABLE aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

CREATE TABLE ANALISE(MES int)

--------------- apenas para analisar os dados-------

Select * from aluno

Select * from analise

DROP TABLE aluno

DROP TABLE ANALISE

-----------------------------------------------------

-- bom agora que criamos e populamos a tabela vamoas a dúvida.

---- Agora vamos ao que não esta funcionando ....

DECLARE @DT_REL (10),

@MES_DT_REL varchar(10),

@DT_REL_ANT varchar(10),

@MES_DT_REL_ANT varchar(4),

@base varchar (1000),

@base2 varchar (1000)

@base = 'analise'

@base2 = 'aluno'

@DT_REL = (select data as DT_REL from @base2)

@MES_DT_REL = (select Month(dns) as MES_DT_REL from @base2)

@DT_REL_ANT = (select DATEadd(Month, -1, dns) as DT_REL_ANT from @base2)

@MES_DT_REL_ANT = (select (Month(dns))-1 as MES_DT_REL_ANT from Base2)

Print @DT_REL

Print @MES_DT_REL

Print @DT_REL_ANT

Print @MES_DT_REL_ANT

set @Script = 'insert into ' + @base + ' (MES) Select top 10 Month(DT_REL) from ' + @base2 + ''

select @Script

exec (@Script)

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Flávio,

O script q postou não irá rodar, pois está com erro nas sintaxes.

Ex.:

@base = 'analise' (errado)

SET @base = 'analise' (certo)

@MES_DT_REL = (select Month(dns) as MES_DT_REL from @base2) (errado)

SET @MES_DT_REL = (select TOP 1 Month(dns) as MES_DT_REL from @base2) (certo)

(a variável só pode receber 1 valor)

A variável @Script não está declarada.

Dá uma olhada no q passei pra você e faz as adaptações...

Link para o comentário
Compartilhar em outros sites

  • 0

Puts.. é mesmo...

Fiz alguma mudanças mais ainda não funciona...

CREATE TABLE aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

CREATE TABLE ANALISE(MES int)

--------------- apenas para analisar os dados-------

Select * from aluno

Select * from analise

DROP TABLE aluno

DROP TABLE ANALISE

-----------------------------------------------------

-- bom agora que criamos e populamos a tabela vamoas a dúvida.

---- Agora vamos ao que não esta funcionando ....

DECLARE @DT_REL (10),

@MES_DT_REL varchar(10),

@DT_REL_ANT varchar(10),

@MES_DT_REL_ANT varchar(4),

@base varchar (1000),

@base2 varchar (1000),

@Script varchar (1000)

SET @base = 'analise'

SET @base2 = 'aluno'

SET @MES_DT_REL = (select TOP 1 Month(DT_REL) as MES_DT_REL from @base2) -- aqui é a data de um campo

@DT_REL_ANT = (select DATEadd(Month, -1, DT_REL) as DT_REL_ANT from @base2)

@MES_DT_REL_ANT = (select (Month(DT_REL))-1 as MES_DT_REL_ANT from Base2)

Print @DT_REL

Print @MES_DT_REL

Print @DT_REL_ANT

Print @MES_DT_REL_ANT

set @Script = 'insert into ' + @base + ' (MES) Select top 10 Month(DT_REL) from ' + @base2 + ''

select @Script

exec (@Script)

Link para o comentário
Compartilhar em outros sites

  • 0

Uma pergunta: você quer fazer todos os inserts ao mesmo tempo? Porque se for isso, não precisa delcarar as variváeis e setar o valor nelas.

Fiz um novo script baseado no seu. Dá uma olhada:

-- criei as tabelas. A tabela ANALISE coloquei uma coluna a mais

CREATE TABLE dbo.aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

CREATE TABLE ANALISE(MES int, MES_ANT int)

-- verificação

Select * from aluno

Select * from analise

--- Declaração de variavies

Declare @base varchar (1000),

@base2 varchar (1000),

@Script varchar (1000)

SET @base = 'analise'

SET @base2 = 'aluno'

-- Inserção de todos os meses, MES e MES ANTERIOR, baseado na tabela ALUNO. OBS.: o selecet está com TOP 10

set @Script = 'insert into ' + @base + ' (MES, MES_ANT) Select top 10 Month(DT_REL), Month(DT_REL_ANT) from ' + @base2 + ''

select @Script

exec (@Script)

-- verificação dos dados.

Select * from aluno

Select * from analise

Se não for isso, posta ai... :.)

Link para o comentário
Compartilhar em outros sites

  • 0

Não Fulvio...

Irei fazer varios inserts em várias tabelas, + diversos calculos com os parâmetros que informei.

updates com esses parametros em outras tabelas, pegar resultado de desses updates, somar, contar... jogar o resultado em outra tabela.. etc....

Exatamente como consta no exemplo que estamos falando ..

Link para o comentário
Compartilhar em outros sites

  • 0

beleza... Então vamos voltar pro exemplo q me passou....

Diz algumas alterações e comentários.

CREATE TABLE dbo.aluno(DT_REL DATEtime,DT_REL_ANT DATEtime)

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

Insert into aluno(DT_REL, DT_REL_ANT) Values('2008-02-01','2008-05-04')

CREATE TABLE dbo.ANALISE(MES int)

--------------- apenas para analisar os dados-------

Select * from aluno

Select * from analise

DROP TABLE aluno

DROP TABLE ANALISE

-----------------------------------------------------

-- bom agora que criamos e populamos a tabela vamoas a dúvida.

---- Agora vamos ao que não esta funcionando ....

DECLARE @DT_REL datetime,

@MES_DT_REL varchar(10),

@DT_REL_ANT datetime,

@MES_DT_REL_ANT varchar(4),

@base varchar (1000),

@base2 varchar (1000),

@Script varchar (1000)

SET @base = 'analise'

SET @base2 = 'aluno'

--SET @MES_DT_REL = (select TOP 1 Month(DT_REL) as MES_DT_REL from @base2) -- assim não funciona, pois o sql espera o nome da tabela, e não uma variável

set @Script = ('select TOP 1 Month(DT_REL) from ' + @base2)

--set @MES_DT_REL = exec (@Script) -- assim também não funciona, pois não se consegue associar o comando de execução da string, pegando o resultado e atribuindo a uma variável

-- você terá q criar uma temporária, jogar os dados do resultdo do EXEC na temporária e depois atribuir à variável.

-- A temporária criada é em tempo de execução. Selecione todos os comandos e rode junto.

declare @tmp table (mes int)

insert into @tmp

exec (@Script)

set @MES_DT_REL = (select mes from @tmp)

-- verifica o dado atribuido a variavel.

select @MES_DT_REL

-- Ai você faz pros outros casos...............................

SET @DT_REL_ANT = (select DATEadd(Month, -1, DT_REL) as DT_REL_ANT from @base2)

SET @MES_DT_REL_ANT = (select (Month(DT_REL))-1 as MES_DT_REL_ANT from Base2)

Print @DT_REL

Print @MES_DT_REL

Print @DT_REL_ANT

Print @MES_DT_REL_ANT

set @Script = 'insert into ' + @base + ' (MES) Select top 10 Month(DT_REL) from ' + @base2 + ''

select @Script

exec (@Script)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...