Значение # в транзакции SQL - PullRequest
2 голосов
/ 10 мая 2011

Привет. Я проверял некоторые процедуры магазина для продукта, установленного в моей компании. Вы знаете, как другие люди решают проблемы и учатся.

Среди этого я нашел это, но я не знаю, каково значение # в sql sp в строке выберите отдельный тип объекта из #CascadeCollect, какие комментарии, пожалуйста?

Это весь сп ..

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

Спасибо за любые комментарии !!!

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Одиночный # в качестве префикса указывает временный объект локальной области действия. В данном случае это явно таблица, но вы также можете иметь #temp процедуры.

Он виден только партии, в которой он создан (и любым дочерним партиям), и автоматически удаляется при выходе из партии.

Таким образом, если это целая хранимая процедура, то, очевидно, ожидается, что она будет запущена из другой процедуры, которая фактически создает временную таблицу.

Вы также можете иметь глобальные временные объекты с префиксом ##.

3 голосов
/ 10 мая 2011

таблица с префиксом # является локальной временной таблицей, она будет удалена, как только выйдет за пределы

create table #test(id int)

insert #test values (1)

select * from #test

Если вы запустите это из другого соединения select * from #test таблица недоступна, так как она локальна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...