Ir para conteúdo

POWERED BY:

Arquivado

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

Davis

Criar tabelas temporárias usando job

Recommended Posts

Problema: Tenho um relatório enorme onde eu tenho que fazer vários SELECTs sendo que muitos deles são repitidos.

Solução: Criar algumas tabelas temporárias com o conteúdo desses SELECTs pra agilizar o acesso.

 

E já que esse relatório deve ser tirado algumas vezes por dia me ocorreu a idéia de criar uma job no SQL Server para agilizar o acesso, uma vez que os dados mais usados já estariam pré-selecionados. Sendo assim bastaria filtrar apenas o conteúdo das tabelas temporárias (que seria atualizado 1x ao dia).

 

Só que a job não funciona... Eis o que eu estou fazendo (são 3 tabelas com praticamente a mesma estrutura, só mudam os dados):

 

CREATE TABLE #tbMonthly(	id_customer	int,	date_pay	smalldatetime NULL,	amount_pay	money NULL)INSERT INTO #tbMonthly (id_customer, date_pay, amount_pay)(	SELECT H.id_customer, MIN(date_pay), AVG(amount_pay)	FROM tbHistory as H	INNER JOIN tbCustomers as C ON H.id_customer = C.id	WHERE		(H.del = '0' OR H.del is null) AND (H.done is null OR H.done = '1') AND 		(C.del = '0') AND		(C.type_member = 7)	GROUP BY H.id_customer)

Fiz isso em uma stored procedure pra testar e funcionou numa boa. O problema é que eu executo a job e não aparece nenhuma tabela temporária em lugar nenhum do tempdb.

 

Eu não tenho experiência nenhuma com jobs... Existe alguma possibilidade de fazer isso?

 

A propósito, eu estava lendo esse artigo pra poder fazer a job: http://www.juliobattisti.com.br/artigos/wi...obsqlserver.asp (só ignorei o código do backup pra colocar o meu, claro :D )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema: Tenho um relatório enorme onde eu tenho que fazer vários SELECTs sendo que muitos deles são repitidos.Solução: Criar algumas tabelas temporárias com o conteúdo desses SELECTs pra agilizar o acesso.E já que esse relatório deve ser tirado algumas vezes por dia me ocorreu a idéia de criar uma job no SQL Server para agilizar o acesso, uma vez que os dados mais usados já estariam pré-selecionados. Sendo assim bastaria filtrar apenas o conteúdo das tabelas temporárias (que seria atualizado 1x ao dia).Só que a job não funciona... Eis o que eu estou fazendo (são 3 tabelas com praticamente a mesma estrutura, só mudam os dados):

CREATE TABLE #tbMonthly(	id_customer	int,	date_pay	smalldatetime NULL,	amount_pay	money NULL)INSERT INTO #tbMonthly (id_customer, date_pay, amount_pay)(	SELECT H.id_customer, MIN(date_pay), AVG(amount_pay)	FROM tbHistory as H	INNER JOIN tbCustomers as C ON H.id_customer = C.id	WHERE		(H.del = '0' OR H.del is null) AND (H.done is null OR H.done = '1') AND 		(C.del = '0') AND		(C.type_member = 7)	GROUP BY H.id_customer)
Fiz isso em uma stored procedure pra testar e funcionou numa boa. O problema é que eu executo a job e não aparece nenhuma tabela temporária em lugar nenhum do tempdb.Eu não tenho experiência nenhuma com jobs... Existe alguma possibilidade de fazer isso?A propósito, eu estava lendo esse artigo pra poder fazer a job: http://www.juliobattisti.com.br/artigos/wi...obsqlserver.asp (só ignorei o código do backup pra colocar o meu, claro :D )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Davis,Acredito que o problema seja mesmo na definição do nome da tabela temporária, que está começando com "#" (#tbMonthly)... Isso está correto, se de fato você. quiser uma tabela temporária - o que não me parece ser o caso. Lembre-se que toda tabela temporária é automaticamente apagada quando o bloco de instruções for terminado. Penso que o seu maior equívoco é tentar utilizar uma tabela temporária ao invés de uma tabela "auxiliar" (essa seria apagada somente mediante uma instrução - inclusive pode ser um job). Tente trocar o nome da tabela #tbMonthly para tbMonthly e verifique a criação dela no banco de dados ativo.Bom, espero ter te ajudado.T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

só pra constar sobre tabelas temporarias:- com uma cerquilha #tabelaTemp a temporária somente é visualizada na conexão atual- com duas cerquilhas ##tabelaTemp a temporária é visualizada em qualquer conexão da instancia do sql serverpara o caso acima, concordo com a sugestão do Buess de criar uma tabela "auxiliar"t+

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.