tsql sql具有相同名称的多个临时表

Mos*_*han 0 t-sql sql-server stored-procedures reporting-services sql-server-2012

我正在使用RDL文件和存储过程来制作报告。RDL文件名是test.rdl,我有四个(4)存储过程连接到此test.rdl文件。因此该文件将具有四个数据集。

报告文件名:

test.rdl

存储过程名称:

  • sp_test_1
  • sp_test_2
  • sp_test_3
  • sp_test_4

这些存储过程中的每一个都有具有相同名称(#temp)的临时表。

create table #temp(
ID int,
Name varchar(max),
Location varchar(max)
)

insert into #temp

select * from anothertable where date between '20171001' and '20171031'
Run Code Online (Sandbox Code Playgroud)

一些额外的查询以获得所需的结果,然后最终删除临时表。

select . . . . . . . . . .

drop table #temp
Run Code Online (Sandbox Code Playgroud)

因此,这四个存储过程都具有使用一个名称(#temp)的临时表。

所以我的问题是,当运行RDL测试文件并且一次调用所有四个(4)存储过程时,此方法是否可以正常工作?我关心的是#temp表,所有四个存储过程在运行结束时都有drop table #temp。这会否在运行时影响临时表的填充,因为其中一个存储过程可能在另一个表正在运行时以drop table完成,从而导致查询取消或结果不完整?

能不能请解释一下。我希望这是一个有效的问题。

Ala*_*eld 6

广义上讲...。本地临时表(使用单个#)仅可用于调用它们的过程或从与创建临时表的过程相同的过程调用的过程。

根据您的描述,听起来您只有4个数据集,每个数据集运行一个存储过程,并且每个SP都创建一个名为的临时表#temp。您没有调用其他SP的SP。

假设这是正确的,那么它将正常工作,实际上,您甚至不必在proc的末尾删除temp表,因为这是自动完成的。

临时表都使用相同的名称进行引用的事实无关紧要,存储在数据库中的物理临时表的实际名称将不是#temp,而是更类似的东西tempdb.dbo.#temp_______________000000000123,关键是它们实际上都是唯一的数据库中的表,但SQL Server会自动处理您在其下创建的名称的转换。