Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 创建表的存储过程-在表列表中找不到它_Sql Server_Stored Procedures_Temp Tables - Fatal编程技术网

Sql server 创建表的存储过程-在表列表中找不到它

Sql server 创建表的存储过程-在表列表中找不到它,sql-server,stored-procedures,temp-tables,Sql Server,Stored Procedures,Temp Tables,我试图运行一个存储过程来创建一个本地表-table1 存储过程应该查找值,创建表并将值插入其中 INSERT INTO #table1 我执行存储过程,它显示有1行受影响,但是,我无法在我的表列表中找到该表。为什么我不能看到或访问它 编辑:我正在SQL Server中针对数据库运行存储过程。存储过程末尾的最后一行是: Select * from #table1 谢谢。在执行存储过程后,您是否尝试刷新这些表该表是本地临时表。它不作为永久表存在,您可以在存储过程的范围之外查找它。一旦存储的进程

我试图运行一个存储过程来创建一个本地表-table1

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

INSERT INTO #table1
我执行存储过程,它显示有1行受影响,但是,我无法在我的表列表中找到该表。为什么我不能看到或访问它

编辑:我正在SQL Server中针对数据库运行存储过程。存储过程末尾的最后一行是:

Select * from #table1 

谢谢。

在执行存储过程后,您是否尝试刷新这些表

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

现在,如果您所做的是查看表中存储过程中某一点的内容,以便对过程进行故障排除,那么您需要在过程中进行设置,以便在不同阶段或遇到错误等特定状态时查看结果

这可能类似于将@debug变量添加到proc中,这样当您处于调试模式时,您可以在运行以下操作时在屏幕上选择结果:

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
然后,您将在不进行调试的情况下执行该过程,因为我没有返回某些内容或插入永久表,所以该过程将插入temp,但您看不到任何内容。我只是不想在这里变得复杂,proc的步骤将根据您想要做的事情而有所不同,我试图展示的概念是如何使用debug变量:

EXEC test_proc @Id= 5
并以调试为例

EXEC test_proc @Id= 5, @debug= 1
或者可能需要使用一个表变量,因为它们不会在发生错误时回滚,然后在Catch块中发生回滚后将该表变量中的数据插入日志记录表,以便您可以看到错误发生时的值


如果您不知道为什么要查找临时数据以及这些数据的含义和用途,就很难说您需要做什么。

什么表列表?你在找什么?它仍然在tempdb中,并将被赋予更长的系统生成名称。当proc退出时,它也会自动删除,假设proc创建了它。这是临时表的前缀。@MartinSmith-存储过程在整个数据库中运行,并在所有表和字段中查找特定值。找到后,应该将值输入到表1中。我不确定这些表是否应该在同一个数据库中?我从来没有使用过表如果在过程中创建临时表,它将在过程执行结束时自动删除,并且在其他会话中无法看到它running@JamesZ-那么在这个选择中我该怎么做?创建一个物理表,并让SP将其插入其中,而不是表1?您也可以使用表。它将可见并与所有会话共享内容,但在原始会话结束后将被删除