小编Dap*_*e B的帖子

在嵌套存储过程中创建重复的临时表

情况如下:

过程1创建临时表(#MYTABLE)并调用过程2.过程2还尝试创建具有不同列的#MYTABLE.当过程2尝试将数据插入#MYTABLE时,会发生错误,抱怨"列名无效".我有两个问题:

1)在程序2中创建#MYTABLE时,系统是否应该抱怨?我理解为什么它不能在编译时反对,但在运行时我会发现错误.

2)鉴于它没有抱怨创建,事实上当您从过程2中的#MYTABLE中进行SELECT时,您会看到新列,为什么它会抱怨INSERT?

下面是代码.取消注释INSERT语句将得到错误.

(我知道很多方法可以解决这个问题,因此我不需要对此做出回应.我只是想了解发生了什么.)

IF OBJECT_ID(N'dbo.MYPROC1', N'P') IS NOT NULL
    DROP PROCEDURE dbo.MYPROC1;
GO

CREATE PROCEDURE dbo.MYPROC1
AS
    CREATE TABLE dbo.#MYTABLE ( Name VARCHAR(256) );

    SELECT
        'DO NOTHING 1' AS TABLENAME;

    EXEC dbo.MYPROC2;

GO

IF OBJECT_ID(N'dbo.MYPROC2', N'P') IS NOT NULL
    DROP PROCEDURE dbo.MYPROC2;
GO

CREATE PROCEDURE dbo.MYPROC2
AS
    SELECT
        'INSIDE PROC 2 BEFOREHAND' AS TABLENAME
       ,*
    FROM
        dbo.#MYTABLE;

    CREATE TABLE dbo.#MYTABLE
        (
         Name VARCHAR(256)
        ,LastName VARCHAR(256)
        );

    --INSERT  INTO dbo.#MYTABLE
    --        ( Name, LastName )
    --        SELECT
    -- …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures

7
推荐指数
1
解决办法
1579
查看次数

标签 统计

sql-server ×1

stored-procedures ×1