日期:2014-05-18  浏览次数:20416 次

不同存储过程中的本地临时表名一样
两个存储过程,里面都使用了相同名称的本地临时表。

当在一个SPID同时调用这2个存储过程时是否会产生混乱?

------解决方案--------------------
当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表
------解决方案--------------------
不会,临时表名会自动生成一个唯一的值.
探讨
现在的问题是,应用程序连上数据库后调用的存储过程对应的SPID都是一个值。
在同一会话内本地临时表名一样不会混乱么?

------解决方案--------------------
只要不是在单个存储过程或者批处理中创建多个临时表,就没必要担心临时表同名问题。
如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则数据库引擎必须能够区分由不同用户创建的表。 为此,数据库引擎在内部为每个本地临时表的表名追加一个数字后缀。 存储在 tempdb 的 sysobjects 表中的临时表,其全名由 CREATE TABLE 语句中指定的表名和系统生成的数字后缀组成。 为了允许追加后缀,为本地临时表指定的 table_name 不能超过 116 个字符。