Работя по доклад, използващ RDL файлове и съхранени процедури. Името на RDL файла е test.rdl и имам четири (4) съхранени процедури, свързани с този файл test.rdl. така че този файл ще има четири набора от данни.
име на файла:
test.rdl
имена на съхранени процедури:
- sp_test_1
- sp_test_2
- sp_test_3
- sp_test_4
всяка от тези съхранени процедури има временни таблици със същото име (#temp).
create table #temp(
ID int,
Name varchar(max),
Location varchar(max)
)
insert into #temp
select * from anothertable where date between "20171001" and "20171031"
няколко допълнителни заявки, за да получите желания резултат и след това най-накрая пуснете таблицата temp.
select . . . . . . . . . .
drop table #temp
така че всички четири съхранени процедури имат временна таблица, използваща едно име (#temp).
така че въпросът ми е, ще работи добре, когатоRDL тестовият файл се изпълнява и когато всички четири (4) запомнени процедури се извикват едновременно? моята загриженост е с таблицата #temp, и четирите запомнени процедури са с drop table #temp в края на теста. това ще повлияе ли на запълването на временните таблици по време на изпълнение, тъй като една от съхранените процедури може да завърши с таблица, докато другата работи, което води до отмяна на заявка или довършване с непълни резултати?
някои мога да обясня. Надявам се, че това е валиден въпрос.
Отговори:
2 за отговор № 1Общо казано.... Местни таблици с временни таблици (с помощта на единичен #
) са достъпни само за процедурата, която ги е извикала, или процедурите, които са били извикани от същата процедура като тази, която е създала временната таблица.
От вашето описание звучи като че ли имате само 4 масиви от данни, всяка от които изпълнява Stored Procedure и всяка от тези SP създава временна таблица, наречена #temp
, Не разполагате с SP, която вика другите SP ...
Ако приемем, че е правилно, тогава ще работи добре, всъщност дори не трябва да изпускате временната таблица в края на процеса, тъй като това става автоматично.
Фактът, че всички таблици с временни стойности са посочени с едно и също име, няма значение, действителното име на таблицата за физически темп, съхранявана в базата данни, няма да бъде #temp, а нещо повече tempdb.dbo.#temp_______________000000000123
, то е, че те всъщност са всички уникални таблици в базата данни, но SQL Server обработва превода до / от името, което сте го създали автоматично.