创建 #table 的存储过程 - 无法在 table 的列表中找到它
Stored procedure that creates #table - unable to find it in list of tables
我正在尝试 运行 创建本地 table 的存储过程 - #table1
存储过程应该查找值并创建 table 并将值插入其中...
INSERT INTO #table1
我执行存储过程,它显示 1 row() 受到影响,但是,我无法在我的 table 列表中找到这个 table。为什么我看不到它或无法访问它?
编辑:我运行在SQL 服务器中针对数据库设置存储过程。在存储过程的最后,最后一行是:
Select * from #table1
谢谢。
您是否尝试过在执行存储过程后刷新表格
#table 是本地温度 table。它不作为您可以在存储过程范围之外查找的永久 table 存在。一旦存储过程为 运行,临时 table 将被删除,因为它不再在范围内。 Temp table 临时存储在 tempdb 数据库中,但具有不同的名称,因为两个人同时 运行 使用存储过程将每个人都有一个 table 可以在proc as @table 但它在 tempdb.
中是两个独立的 tables
现在,如果您正在做的是查看存储过程中某个点的#table 中的内容,以便对过程进行故障排除,那么您需要在过程中进行设置,以便您可以在不同阶段或当您遇到特定状态(例如错误)时查看结果。
这可能类似于向 proc 添加一个 @debug 变量,这样当您处于调试模式时,您可以 select 在您 运行 进行类似操作时将结果显示在屏幕上:
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
然后您将在不调试的情况下执行该过程(请注意,由于我没有返回某些内容或插入到永久 tables,因此该过程将插入到#temp 但您看不到任何内容。我只是不想在这里变得复杂,proc 的步骤会根据你想做什么而有所不同,我想展示的概念是如何使用调试变量):
EXEC test_proc @Id= 5
并调试为
EXEC test_proc @Id= 5, @debug= 1
或者它可能涉及使用 table 变量(因为它们不会在出错时回滚),然后将来自该 table 变量的数据插入到日志记录 table 在 Catch 块中发生回滚之后,以便您可以看到错误发生时的值。
如果不进一步了解您为什么要查找#temp 以及数据的含义和用途,就很难说出您需要做什么。
我正在尝试 运行 创建本地 table 的存储过程 - #table1
存储过程应该查找值并创建 table 并将值插入其中...
INSERT INTO #table1
我执行存储过程,它显示 1 row() 受到影响,但是,我无法在我的 table 列表中找到这个 table。为什么我看不到它或无法访问它?
编辑:我运行在SQL 服务器中针对数据库设置存储过程。在存储过程的最后,最后一行是:
Select * from #table1
谢谢。
您是否尝试过在执行存储过程后刷新表格
#table 是本地温度 table。它不作为您可以在存储过程范围之外查找的永久 table 存在。一旦存储过程为 运行,临时 table 将被删除,因为它不再在范围内。 Temp table 临时存储在 tempdb 数据库中,但具有不同的名称,因为两个人同时 运行 使用存储过程将每个人都有一个 table 可以在proc as @table 但它在 tempdb.
中是两个独立的 tables现在,如果您正在做的是查看存储过程中某个点的#table 中的内容,以便对过程进行故障排除,那么您需要在过程中进行设置,以便您可以在不同阶段或当您遇到特定状态(例如错误)时查看结果。
这可能类似于向 proc 添加一个 @debug 变量,这样当您处于调试模式时,您可以 select 在您 运行 进行类似操作时将结果显示在屏幕上:
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
然后您将在不调试的情况下执行该过程(请注意,由于我没有返回某些内容或插入到永久 tables,因此该过程将插入到#temp 但您看不到任何内容。我只是不想在这里变得复杂,proc 的步骤会根据你想做什么而有所不同,我想展示的概念是如何使用调试变量):
EXEC test_proc @Id= 5
并调试为
EXEC test_proc @Id= 5, @debug= 1
或者它可能涉及使用 table 变量(因为它们不会在出错时回滚),然后将来自该 table 变量的数据插入到日志记录 table 在 Catch 块中发生回滚之后,以便您可以看到错误发生时的值。
如果不进一步了解您为什么要查找#temp 以及数据的含义和用途,就很难说出您需要做什么。