Inquiridor
Procedure

Pergunta
-
Ola , !!!
Pessoal , preciso criar uma mecanismo no banco de dados , que é o seguinte
Tenho um arquivo em Excel , onde tenho 3 campos
Cliente , Mes , Ano
Estou levando estas informações para o Banco de dados via "Dts" até ai tudo bem , mas o que preciso fazer é o seguinte.
Cada linha no arquivo contem 1 cliente , Mes , ano . preciso jogar estas informações no banco contando 12 meses a partir do mes e o ano que o usuario colocou na linha.
Como faço isto com um cursor, se for , alguem tem algum exemplo ??
Att,
Cristiano
Todas as Respostas
-
Olá Cristiano!!
Vamos ver se entendi corretamente, o seu arquivo tem esses dados:
Nome, Mes, Ano
"Nome do Cliente", 08, 2007
E precisa incrementar 12 meses?? Mas, sendo assim, basta incrementar 1 no ano. A melhor forma para fazer isso é primeiramente jogar os dados numa tabela intermediária e depois pegar os dados já corrigidos (incrementados no valor necessário) na tabela destino.
Se eu interpretei errado, retorne.
Abraço
-
Olá , alexandre !!!
Seria isso mesmo , mas como faço este incremento inserindo em outra tabela !
Exemplo
Tabela Enviada pelo usuario
CLIENTE MÊS ANO 10 5 2007 Tabela tratada pegando os 12 meses a partir do mes e ano que o usuario informou
CLIENTE MÊS ANO 10 5 2007 10 6 2007 10 7 2007 10 8 2007 10 9 2007 10 10 2007 10 11 2007 10 12 2007 10 1 2008 10 2 2008 10 3 2008 10 4 2008 10 5 2008 -
Cristiano,
Bem que eu achei que tava muito fácil, rs. Eu não tinha entendido. Bom, se essa é uma tarefa executada frequentemente, eu implementaria um função com retorno de tabela, veja:
Code Snippet-- Criação da function
CREATE
FUNCTION dbo.fnIncrementarMesAno (@Cliente INT, @Mes INT, @Ano INT)RETURNS
@t TABLE (Cliente INT, Mes INT, Ano INT)AS
BEGIN
END
-- Retorno de dados
SELECT
* FROM dbo.fnIncrementarMesAno (10, 5, 2007)Veja se atende sua necessidade.
Abraço
-
-
E aí Cristiano,
Você pode usar para fazer o insert na tabela que desejar. Por exemplo:
INSERT INTO Tabela (Usuario, Mes, Ano)
SELECT dbo.fnIncrementarMesAno (@cliente, @mes, @ano)
Dessa maneira será feito insert com os dados retornados pela função.
Abraço
-
Olá , Alexandre
Não consegui ainda aplicar esta function no meu script
Exemplo :
Tenho uma tabela e não procedure onde tenho os campos
Cliente , Mes , ano - onde tenho varios registros de clientes diferentes.
Como eu faria para usar o select into , tentei com a instrução acima , mas não deu certo !
Att,
Cristiano Brito
-
Alexandre, estou fazendo desta forma
Criei uma tabela de teste chamada "TABELA" p/ inserir os dados
INSERT INTO TABELA (CLIENTE, MES, ANO)
SELECT dbo.fnIncrementarMesAno (cliente, mes, ano)Retorna este erro !
Server: Msg 120, Level 15, State 1, Line 2
The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.Att,
Cristiano
-
-
-
Alexandre
Estou montando o relacionamento desta forma , mas retorna erro
INSERT INTO TABELA (cliente,mes,ano)
SELECT
*
FROM DBO.FNINCREMENTARMESANO (CLIENTE,MES,ANO) , ENVIO_SERRALHEIRO
WHERE FNINCREMENTARMESANO.CLIENTE = ENVIO_SERRALHEIRO.CLIENTE AND
FNINCREMENTARMESANO.MES = MONTH(ENVIO_SERRALHEIRO.DATA_COMECO) AND
FNINCREMENTARMESANO.ANO = YEAR(ENVIO_SERRALHEIRO.DATA_COMECO)Erro:
Server: Msg 155, Level 15, State 1, Line 4
'CLIENTE' is not a recognized OPTIMIZER LOCK HINTS option.Att,
Cristiano
-
Cristiano,
Dessa maneira não vai funcionar. Esse tipo de função não aceita receber vários registros como parâmetro. A solução seria modificar completamente a função para que receba apenas o ID do cliente e dentro dela faça um join com essa outra tabela.
Veja se consegue fazer algo nesse sentido, senão retorne.
Abraço
-
-
-
Opa,
Veja se te ajuda, acho que é como você precisa:
Code Snippetdeclare
@tmp table (id int identity(1,1), cliente int, mes int, ano int)declare
@c int, -- variável de controle@cliente
int, @mes int, @ano intselect
@c = 1-- popula tabela temporária
insert
into @tmp (cliente, mes, ano)select
cliente, month(envio_serralheiro.data_comeco), year(envio_serralheiro.data_comeco)from
envio_serralheirowhile
@c <= (select max (id) from @tmp)begin
end
Abraço