创建#table的存储过程 - 无法在表列表中找到它

时间:2017-05-04 17:59:06

标签: sql-server stored-procedures temp-tables

我正在尝试运行一个创建本地表的存储过程 - #table1

存储过程应该查找值并创建表并将值插入其中...

Select * from #table1 

我执行存储过程并显示1行()受影响,但是,我无法在表格列表中找到此表。为什么我无法看到它或访问它?

编辑:我正在SQL Server中针对数据库运行存储过程。在存储过程结束时,最后一行是:

{{1}}

感谢。

2 个答案:

答案 0 :(得分:2)

#table是一个本地临时表。它不作为永久表存在,您可以在存储过程的范围之外查找。运行存储过程后,临时表将被删除,因为它不再在范围内。临时表临时存储在tempdb数据库中,但具有不同的名称,因为两个人同时运行存储过程,每个人都有一个表可以在proc中作为@table引用,但它将是tempdb中的两个单独的表

现在,如果你正在做什么,想要查看存储过程中某个点的#table中的内容以便对proc进行故障排除,那么你需要在proc中设置东西以便你可以在不同的阶段或当你遇到某种状态,如错误。

这可能就像在proc中添加@debug变量一样,这样当你处于调试模式时,你可以在运行类似的东西时在屏幕上选择结果:

CREATE PROC test_proc (@Id INT, @debug BIT = 0)
AS

CREATE TABLE #temp(id INT)

INSERT INTO #temp
VALUES (@Id), (1), (2)

IF @debug = 1 
BEGIN
SELECT * FROM #temp
END

UPDATE #temp
SET Id = id-1

IF @debug = 1 
BEGIN
SELECT * FROM #temp
END

GO

然后您将执行proc而不进行调试(请注意,由于我没有返回某些内容或插入永久表,因此此proc将插入到#temp但您无法看到任何内容。我只是没有&#39 ; t想要在这里变得复杂,proc的步骤将根据你想要做的事情而变化,我试图展示的概念是如何使用调试变量):

EXEC test_proc @Id= 5

,调试为

EXEC test_proc @Id= 5, @debug= 1

或者它可能涉及使用表变量(因为它们不会在出错时回滚),然后在Catch块中发生回滚后将该表变量中的数据插入到日志表中,以便您可以在错误发生时查看值。

如果不了解您为什么要寻找#temp以及数据的含义和用途,我们很难说您需要做什么。

答案 1 :(得分:-1)

您是否尝试在排除存储过程

后刷新表格