如何捕捉SQLSERVER到VFP临时表时的进度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何捕捉SQLSERVER到VFP临时表时的进度相关的知识,希望对你有一定的参考价值。

参考技术A 要捕获什么异常?用try catch 参考技术B 不能。因为vfp只是把语句传递给服务器,由服务器去执行,最后将结果集及消息返回给vfp,但是服务器的执行情况不会实时返回给vfp。

使用临时表时 SQL Server 显示“无效的对象名称 '#temp'”

【中文标题】使用临时表时 SQL Server 显示“无效的对象名称 \'#temp\'”【英文标题】:SQL Server shows "Invalid object name '#temp'" when working with a temporary table使用临时表时 SQL Server 显示“无效的对象名称 '#temp'” 【发布时间】:2010-11-18 22:16:25 【问题描述】:

我已经创建了一个过程

create procedure testProcedure_One 
as
DECLARE @Query nvarchar(4000)

begin
SET @Query = 'SELECT * into #temptest FROM  Table1'

Exec sp_Executesql @query

SELECT * FROM #temptest
drop table #temptest
end

当我运行程序 testProcedure_One 时,我收到错误消息:

Invalid object name '#temp'

但如果我使用##temp means,它就可以工作:

create procedure testProcedure_two 
as
DECLARE @Query nvarchar(4000)

begin

SET @Query = 'SELECT * into ##temptest FROM  Table1'


Exec sp_Executesql @query

SELECT * FROM ##temptest
drop table ##temptest
end

testProcedure_two 工作正常

可能是什么问题?我该如何解决?

【问题讨论】:

【参考方案1】:

大概您有以下代码从#temp 中选择,给您错误?

这取决于范围。 ##temp 是一个全局临时表,在其他会话中可用。 #temp 是“本地”临时表,只能由当前执行范围访问。 sp_executesql 在不同的范围内运行,因此它会将数据插入#temp,但是如果您尝试在 sp_executesql 调用之外访问该表,它将找不到它。

例如 此错误是因为 #Test 已创建且仅对 sp_executesql 上下文可见:

EXECUTE sp_executesql N'SELECT 1 AS Field1 INTO #Test'
SELECT * FROM #Test

上面的内容适用于##Test,因为它会创建一个全局临时表。

这可行,因为 SELECT 是同一范围的一部分。

EXECUTE sp_executesql N'SELECT 1 AS Field1 INTO #Test; SELECT * FROM #Test'

我的问题是:

    您真的需要使用临时表吗,如果没有它们,您是否找不到解决方案,例如使用临时表?子查询? 您真的需要使用 sp_executesql 执行这样的 sql 吗?

【讨论】:

谢谢。我知道它超出了范围,但我没有想到我必须使用相同的查询进行选择。【参考方案2】:

使用 CREATE TABLE 创建临时表,然后使用 INSERT INTO 而不是 SELECT INTO 插入值。

这解决了我的问题。

【讨论】:

【参考方案3】:

为了让您执行,我认为应该首先使用 ddl 语句创建#tmp_table。

然后你执行你的 exec 并且你在 exec 中创建的存储过程应该具有相同的名称temp table viz.#tmp_table

【讨论】:

以上是关于如何捕捉SQLSERVER到VFP临时表时的进度的主要内容,如果未能解决你的问题,请参考以下文章

使用临时表时 SQL Server 显示“无效的对象名称 '#temp'”

临时子表达式的临时生命周期,绑定到引用

数据库操作时的临时文件

临时分别的临啥意思?

VFP里使用SQL的SELECT语句将查询结果存储在一个临时表中,应使用啥子句?

关于sqlserver临时表的问题,请教高手!