Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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_Azure_Azure Sql Database - Fatal编程技术网

Sql server 查询完成后立即删除临时表

Sql server 查询完成后立即删除临时表,sql-server,azure,azure-sql-database,Sql Server,Azure,Azure Sql Database,如果我高亮显示,然后执行第1-4行,我将得到输出 命令已成功完成 然后,如果我突出显示并执行第6-14行,我将得到输出消息 无效的对象名称“TestThis” 如果我突出显示并执行第1-16行,我可以看到返回的一行数据。为什么在同一会话中刚刚创建的临时表在代码执行后立即被删除/无效?我们正在基于Azure的SQL Server上运行此解决方案。您可以尝试此解决方案,如我在下面的示例中所示 CREATE TABLE #TestThis(oldvalue INT, newvalue INT ) I

如果我高亮显示,然后执行第1-4行,我将得到输出

命令已成功完成

然后,如果我突出显示并执行第6-14行,我将得到输出消息

无效的对象名称“TestThis”


如果我突出显示并执行第1-16行,我可以看到返回的一行数据。为什么在同一会话中刚刚创建的临时表在代码执行后立即被删除/无效?我们正在基于Azure的SQL Server上运行此解决方案。

您可以尝试此解决方案,如我在下面的示例中所示

CREATE TABLE #TestThis(oldvalue INT, newvalue INT )

INSERT INTO  #TestThis(oldvalue, newvalue) VALUES (1,3),(5,7)

select  oldvalue, newvalue FROM  #TestThis

IF OBJECT_ID('tempdb..#TestThis') IS NOT NULL DROP TABLE #TestThis
在本例中,您需要检查对象id是否为null,如果它不是null,则需要删除临时表


我希望这对你有帮助

每次单击“执行”图标时都会创建一个会话,因此是的,如果不突出显示“创建表”部分,该表将不存在


如果希望表保留在db中直到删除它,则可以删除表名前面的哈希。。。。也可以在每次单击“执行”时突出显示“创建表”部分……以更适合您的需要的为准。

临时表是会话级别的。如果数据库连接或会话已关闭,则对象TestThis将被删除

你必须继续上课

您应该首先突出显示执行行1-4,以创建临时表TestThis(如果不存在)

  CREATE TABLE #TestThis
  (
   oldvalue INTEGER,
   newvalue INTEGER) 
然后可以执行第6-14行。如果不先创建临时表,如何将数据插入临时表TestThis

现在您可以执行:

INSERT INTO #TestThis
 (
    oldvalue,
    newvalue
   )
 VALUES
 (  1234,
    7788
    )


希望这能有所帮助。

如果会话仍处于活动状态,则临时表应该仍然存在并且可以访问。确保您正在同一会话上执行create语句和其他语句,并且其间没有收到断开连接消息

确保在查询执行签入SSMS关闭后断开连接

如果仍然失败,请执行以下检查:

创建临时表,并使会话保持活动状态。不要关闭或断开选项卡:

CREATE TABLE #TestThis (oldvalue INT, newvalue INT)
在不同的会话上,按如下方式查询tempdb:

SELECT * FROM tempdb.sys.tables WHERE [name] LIKE N'#TestThis%'
您应该能够看到在另一个会话上创建的临时表,从相同的名称开始,并在末尾得到一堆下划线和一些数字。这意味着该表仍然存在,您应该能够从原始会话访问它

如果打开第三个会话并创建相同的临时表,则应在tempdb查询中列出其中的2个:


事实证明,此问题的原因是使用MFA而不是Active Directory密码。一旦连接切换到Active Directory密码,临时表将按预期创建、访问和保存。

您的数据库是什么版本或兼容级别?我刚刚在Azure SQL Server 2014 120上运行了此程序,效果如预期。临时表不会停留在周围…请尝试突出显示它们。我在SSMS 17.9中运行相同的代码,我的Azure SQL数据库是V12,兼容性级别是140,一切正常。谢谢,您的回答最接近于了解问题所在和可能的解决方案
SELECT * FROM tempdb.sys.tables WHERE [name] LIKE N'#TestThis%'