太阳集团tyc5997|官网【中国】有限公司

浅析SQL Server嵌套存储过程中使用同名临时表的奇
  • 作者:admin
  • 发表时间:2021-03-16 07:50
  • 来源:未知

本文主要介绍了在SQL Server的嵌套存储过程中使用同名的临时表怪。本文非常详细,对大家的学习或工作都有一定的参考价值。需要的朋友可以参考一下。

SQL Server的嵌套存储过程、外部存储过程和内部存储过程(嵌套称为存储过程)中是否可以存在同名的本地临时表?如果可能,有什么问题或者限制吗?在嵌套存储过程中,是调用外部存储过程的临时表还是自己定义的临时表?局部临时表是否有“作用域”,就像高级语言中的变量一样?

注意:它也可以被称为父存储过程和子存储过程,外部存储过程和内部存储过程。这些只是不同的名字或术语。我们在这里统一使用外部存储过程和内部存储过程。后续文章就不描述了。

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

如果存在(从系统对象中选择1,其中对象标识=对象标识(N'dbo.PRC_TEST ')和对象属性(对象标识,' IsProcedure')=1)

开始

DROP PROCESSion dbo。PRC_TEST

结束

CREATE PROC dbo。PRC_TEST

如同

开始

CREATE TABLE # tmp _ test(id INT);

插入#tmp_test

选择1;

SELECT * FROM # tmp _ test

执行PRC_SUB_TEST

选择*从# tmp _测试

结束

IF EXISTS(从系统对象中选择1,其中OBJECT _ ID=OBJECT _ ID(N ' dbo . PRC _ SUB _ TEST ')和OBJECTPROPERTY(object_id,' IsProcedure')=1)

开始

DROP PROCESSion dbo。PRC _ SUB _ TEST

结束

CREATE PROCEDURE dbo。PRC_SUB_TEST

如同

开始

CREATE TABLE #tmp_test(名称VARCHAR(128));

插入#tmp_test

从系统对象中选择名称

SELECT * FROM # tmp _ test

结束

EXEC PRC _ TEST

简单的测试看起来很正常,没有发现问题。如果这个时候下结论,太早了!例如,你看到一只天鹅是白色的。如果你下结论:“天鹅都是白的”,其实世界上有黑天鹅,只是你没见过而已!如下所示,我们修改了存储过程dbo。PRC_SUB_TEST并用字段名替换*,如下所示:

IF EXISTS(从系统对象中选择1,其中OBJECT _ ID=OBJECT _ ID(N ' dbo . PRC _ SUB _ TEST ')和OBJECTPROPERTY(object_id,' IsProcedure')=1)

开始

DROP PROCESSion dbo。PRC _ SUB _ TEST

结束

CREATE PROCEDURE dbo。PRC_SUB_TEST

如同

开始

CREATE TABLE #tmp_test(名称VARCHAR(128));

INSERT INT唐山网站设计O #tmp_test

从系统对象中选择名称

Baidu
sogou