首页 > 解决方案 > 在子过程中创建临时表

问题描述

我热衷于在子进程中创建一些 SQL Server 临时表,以将存储过程分解为多个部分,而不是一个大的单一进程。

IE

CREATE PROCEDURE dbo.P422270HRF605CreateTempTables
AS
    IF OBJECT_ID('tempdb..#tmpState') IS NOT NULL
        DROP TABLE #tmpState

    CREATE TABLE #tmpState 
    (
        StateID VARCHAR(8) NOT NULL,
        Include VARCHAR(1) NOT NULL
    )
GO

我有另一个程序调用它,然后使用临时表..

ALTER PROCEDURE Membership.GenerateHRF605Data
    @FromDate DateTime,
    @ToDate   DateTime,
    @MemberNo INT
AS 
BEGIN
    -- create all the temp tables required for HRF 605 processing
    EXEC dbo.P422270HRF605CreateTempTables

    INSERT INTO #tmpState
        SELECT StateID, Include = 'N'
        FROM dbo.States
        UNION
        SELECT 'Overseas', 'N'
        UNION
        SELECT 'Unknown', 'N'

但这似乎在运行时失败:

EXEC [Membership].[GenerateHRF605Data] @FromDate='20190901', @ToDate='20190930', @MemberNo=90001

我收到此错误:

消息 208,级别 16,状态 0,过程 Membership.GenerateHRF605Data,第 125 行 [批处理开始行 0]
无效的对象名称“#tmpState”。

也许 SQL Server 不允许在调用过程中创建临时表并在调用过程中使用它们?

标签: sqlsql-server

解决方案


推荐阅读