软件下载吧文章资讯

分类分类

浅析SQL Server数据库的嵌套存储过程中使用同名的临时表问题

2024-02-05 12:47作者:下载吧

SQL Server的嵌套存储过程,外层存储过程和内层存储过程(被嵌套调用的存储过程)中可以存在相同名称的本地临时表吗?如果可以的话,那么有没有什么问题或限制呢? 在嵌套存储过程中,调用的是外层存储过程的临时表还是自己定义的临时表呢? 是否类似高级语言的变量一样,本地临时表有没有“作用域“范围呢?

注意:也可以称呼为父存储过程和子存储过程,外层存储过程和内层存储过程。这些只是不同的称呼或叫法而已。我们这里统一使用外层存储过程和内层存储过程。后续文章部分不再述说。

我们先来看一个例子,如下所示,我们构造一个简单的例子。

IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N’dbo.PRC_TEST’) AND OBJECTPROPERTY(object_id, ‘IsProcedure’) =1)
BEGIN
DROP PROCEDURE dbo.PRC_TEST
END
GO
CREATE PROC dbo.PRC_TEST
AS
BEGIN

CREATE TABLE #tmp_test(id INT);

INSERT INTO #tmp_test
SELECT 1;

SELECT * FROM #tmp_test;

EXEC PRC_SUB_TEST

SELECT * FROM #tmp_test

END
GO

IF EXISTS(SELECT 1 FROM sys.objects WHERE object_id= OBJECT_ID(N’dbo.PRC_SUB_TEST’ ) AND OBJECTPROPERTY(object_id, ‘IsProcedure’)=1)
BEGIN
DROP PROCEDURE dbo.PRC_SUB_TEST;
END
GO

CREATE PROCEDURE dbo.PRC_SUB_TEST
AS
BEGIN

CREATE TABLE #tmp_test(name VARCHAR(128));

INSERT INTO #tmp_test
SELECT name FROM sys.objects

SELECT * FROM #tmp_test;
END
GO

EXEC PRC_TEST;

展开全部

相关文章

说两句网友评论
    我要跟贴
    取消