Значение # в транзакции SQL

#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 , таблица будет недоступна, поскольку она локальная