/ / tsql sql wiele tymczasowych tabel o tej samej nazwie - sql-server, tsql, stored-procedures, reporting-services, sql-server-2012

tsql sql wiele tymczasowych tabel o tej samej nazwie - sql-server, tsql, stored-procedures, reporting-services, sql-server-2012

Pracuję nad raportem przy użyciu plików RDL i procedur przechowywanych. Nazwa pliku RDL to test.rdl i mam cztery (4) zapisane procedury podłączone do tego pliku test.rdl. więc ten plik będzie miał cztery zestawy danych.

nazwa pliku raportu:

test.rdl

nazwy procedur składowanych:

  • sp_test_1
  • sp_test_2
  • sp_test_3
  • sp_test_4

każda z tych procedur przechowywanych ma tabele tymczasowe o tej samej nazwie (#temp).

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

insert into #temp

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

kilka dodatkowych zapytań, aby uzyskać pożądany wynik, a następnie w końcu upuścić tabelę tymczasową.

select . . . . . . . . . .

drop table #temp

więc wszystkie cztery procedury przechowywane mają tabelę tymczasową z jedną nazwą (#temp).

więc moje pytanie brzmi, czy to działa dobrze, gdyPlik testowy RDL jest uruchamiany i gdy wszystkie cztery (4) zapisane procedury są wywoływane jednocześnie? moim problemem jest tabela #temp, wszystkie cztery procedury przechowywane mają tabelę drop #temp na końcu przebiegu. czy to wpłynie na wypełnianie tabel tymczasowych w czasie wykonywania, ponieważ jedna z procedur przechowywanych może zakończyć się tabelą kropli, podczas gdy druga działa, powodując anulowanie zapytania lub kończenie z niekompletnymi wynikami?

może niektóre proszę wyjaśnić. Mam nadzieję, że jest to prawidłowe pytanie.

Odpowiedzi:

2 dla odpowiedzi № 1

Mówiąc ogólnie.... Lokalne tabele temp (przy użyciu pojedynczego #) są dostępne tylko dla procedury, która je wywołała lub procedury, które zostały wywołane z tej samej procedury, co procedura, która utworzyła tabelę tymczasową.

Z twojego opisu wynika, że ​​masz tylko 4 zestawy danych, z których każdy uruchamia procedurę składowaną, a każde z tych SP tworzy tabelę tymczasową o nazwie #temp. Nie masz SP, który wywołuje inne SP ...

Zakładając, że jest to poprawne, to działa dobrze, w rzeczywistości nie musisz nawet upuszczać tabeli tymczasowej na końcu procesu, ponieważ jest to wykonywane automatycznie.

Fakt, że wszystkie tabele tymczasowe są przywoływane przy użyciu tej samej nazwy, nie ma znaczenia, faktyczna nazwa fizycznej tabeli tymczasowej przechowywanej w bazie danych nie będzie #temp, ale coś bardziej podobnego tempdb.dbo.#temp_______________000000000123Chodzi o to, że są to w rzeczywistości wszystkie unikalne tabele w bazie danych, ale SQL Server automatycznie przetwarza tłumaczenie na / z nazwy, pod którą zostało utworzone.