/ / tsql sql várias tabelas temporárias com o mesmo nome - sql-server, tsql, procedimentos armazenados, reporting-services, sql-server-2012

tsql sql várias tabelas temporárias com o mesmo nome - sql-server, tsql, procedimentos armazenados, reporting-services, sql-server-2012

Eu estou trabalhando em um relatório usando arquivos RDL e procedimentos armazenados. O nome do arquivo RDL é test.rdl e eu tenho quatro (4) procedimentos armazenados conectados a este arquivo test.rdl. então este arquivo terá quatro conjuntos de dados.

nome do arquivo de relatório:

test.rdl

nomes de procedimentos armazenados:

  • sp_test_1
  • sp_test_2
  • sp_test_3
  • sp_test_4

Cada um desses procedimentos armazenados possui tabelas temporárias com o mesmo nome (#temp).

create table #temp(
ID int,
Name varchar(max),
Location varchar(max)
)

insert into #temp

select * from anothertable where date between "20171001" and "20171031"

mais algumas consultas extras para obter o resultado desejado e, finalmente, descartar a tabela temporária.

select . . . . . . . . . .

drop table #temp

Portanto, todos os quatro procedimentos armazenados têm tabela temporária usando um nome (#temp).

então minha pergunta é, isso vai funcionar bem quando oO arquivo de teste RDL é executado e quando todos os quatro (4) procedimentos armazenados são chamados de uma só vez? minha preocupação é com a tabela #temp, todos os quatro procedimentos armazenados possuem drop table #temp no final da execução. Isso afetará o preenchimento das tabelas temporárias durante o tempo de execução, pois um dos procedimentos armazenados pode terminar com a tabela suspensa, enquanto o outro estava sendo executado, resultando no cancelamento da consulta ou no término com resultados incompletos?

pode algum por favor explique. Espero que esta seja uma pergunta válida.

Respostas:

2 para resposta № 1

Em geral.... Tabelas temp locais (usando uma única #) estão disponíveis apenas para o procedimento que os chamou ou procedimentos que foram chamados do mesmo procedimento que aquele que criou a tabela temporária.

A partir de sua descrição, parece que você tem apenas 4 conjuntos de dados, cada um executando um Stored Procedure e cada um desses SP "s cria uma tabela temporária chamada #temp. Você não tem um SP que chama o outro SP ...

Assumindo que "correto", então ele funcionará bem, na verdade você nem precisa abandonar a tabela temporária no final do processo, como isso é feito automaticamente.

O fato de que as tabelas temporárias são todas referenciadas usando o mesmo nome não importa, o nome real da tabela temporária física armazenada no banco de dados não será #temp mas algo mais como tempdb.dbo.#temp_______________000000000123, o ponto é que eles são, na verdade, todas as tabelas exclusivas no banco de dados, mas o SQL Server manipula a tradução de / para o nome que você criou automaticamente.