#tsql
#tsql
Вопрос:
Привет, я проверял некоторые процедуры хранения продукта, установленного в моей компании, вы знаете, чтобы увидеть, как другие люди решают проблемы и учатся.
Среди этого я нашел это, но я не знаю, что означает # в sql sp в строке select distinct objecttype из #CascadeCollect, пожалуйста, любые комментарии?
Это весь sp..
begin
-- get all the unique otcs collected in the temp table.
declare @EntityCode int
-- check if the entity requires special casing.
declare @DbCascadeMask int
-- special casing for calendar delete
exec p_DeleteCalendar
declare otccursor cursor for
select distinct objecttype from #CascadeCollect <------ here is the # ....
open otccursor
fetch otccursor into @EntityCode
while @@fetch_status = 0
begin
select @DbCascadeMask = DbCascadeMask
from EntityView as Entity
where Entity.ObjectTypeCode = @EntityCode
if @DbCascadeMask <> 0
begin
exec p_BulkDeleteGeneric @EntityCode
end
fetch otccursor into @EntityCode
end
CLOSE otccursor
DEALLOCATE otccursor
-- Return the count of entity instances that are still not deleted (because they
-- require platform bizlogic/special casing.
select count(*) as NotDeletedCount from #CascadeCollect where processed = 2
end
Спасибо за любые комментарии!!!
Ответ №1:
Единица #
в качестве префикса указывает на временный объект с локальной областью действия. В данном случае это явно таблица, но у вас также могут быть #temp
процедуры.
Он виден только тому пакету, в котором он создан (и любым дочерним пакетам) и автоматически удаляется при завершении работы пакета.
Итак, если это целая хранимая процедура, то, очевидно, ожидается, что она будет запущена из другой процедуры, которая фактически создает временную таблицу.
У вас также могут быть глобальные временные объекты с префиксом ##
.
Ответ №2:
таблица с префиксом # является локальной временной таблицей, она будет удалена, как только выйдет за пределы области видимости
create table #test(id int)
insert #test values (1)
select * from #test
Если вы запустите это из другого соединения select * from #test
, таблица будет недоступна, поскольку она локальная