SQL Server использует локальную временную таблицу в хранимой процедуре, созданной в другой хранимой процедуре - PullRequest
0 голосов
/ 27 сентября 2019

Я унаследовал базу данных, которая содержит множество хранимых процедур, которые создают локальную временную таблицу, вызывает процедуру, которая использует временную таблицу, а затем удаляет временную таблицу.Вот так:

CREATE PROCEDURE procSelectFromTable
    AS
    BEGIN
        SELECT *
    FROM #myTable
END;
GO

CREATE PROCEDURE procMakeTable
AS
BEGIN
    SELECT 1 AS [ID]
        ,'NestedProcedure' AS [Message]
    INTO #myTable;

    EXEC procSelectFromTable

    DROP TABLE #myTable;
END;
GO

EXEC procMakeTable;
GO

--Clean up
IF OBJECT_ID('tempdb..#myTable') IS NOT NULL
    DROP TABLE #myTable;

DROP PROCEDURE procMakeTable;

DROP PROCEDURE procSelectFromTable

Я не видел процедур, написанных таким образом ранее.Безопасно ли мне предполагать, что это нормально, потому что вложенная процедура всегда будет вызываться в одном и том же spid и всегда будет иметь доступ к временной таблице?

1 Ответ

2 голосов
/ 27 сентября 2019

Да, вложенная процедура будет иметь доступ к локальной временной таблице.Это было обычным делом до введения табличных параметров или когда процедуры существуют в разных базах данных в одном и том же экземпляре.Процедуры тесно связаны и могут быть проблемой при тестировании «дочерней» процедуры, но у нее есть то преимущество, что ее можно вызывать из нескольких процедур.

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