我正在尝试运行一个创建本地表的存储过程 - #table1
存储过程应该查找值并创建表并将值插入其中...
Select * from #table1
我执行存储过程并显示1行()受影响,但是,我无法在表格列表中找到此表。为什么我无法看到它或访问它?
编辑:我正在SQL Server中针对数据库运行存储过程。在存储过程结束时,最后一行是:
{{1}}
感谢。
答案 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)
您是否尝试在排除存储过程
后刷新表格