嵌套存储过程调用时临时表的范围是多少?

Sle*_*ght 7 t-sql sql-server stored-procedures

这是两部分问题:

  1. 我有两个存储过程:sp1和sp2.如果sp1创建临时表#temp然后执行sp2我将在嵌套过程中访问#temp吗?如果没有,怎么用另一种方式呢?

  2. 函数是否可以接受表类型的参数?我试过但是SQL Server给了我一个错误.为什么这不起作用?也许sqlserver应该支持像Generic这样的东西.

Nat*_*erl 10

  1. 是的,临时表位于连接范围内,因此嵌套存储过程(sp2)可以访问sp1中的#temp table create.

  2. 是的,在SQL 2008中,我们能够将表值参数(TVP)作为输入传递给函数或存储过程.你可以在这里阅读更多.


Jig*_*ekh 8

IT工作,要访问子程序中的临时表,必须在父级中声明它.

create proc test2
    As
    BEGIN

        insert into #tmpchild
        select 100

    END

CREATE PROC [dbo].[TEST]
As
BEGIN

    create table #tmpchild(id int)
    exec test2;
    select * FROM #tmpchild;
END
Run Code Online (Sandbox Code Playgroud)

在运行TEST SP时,它调用test2,在子SP中可以访问#tempchild.它给出了以下输出.

100
Run Code Online (Sandbox Code Playgroud)