Sql server 查询完成后立即删除临时表
如果我高亮显示,然后执行第1-4行,我将得到输出 命令已成功完成 然后,如果我突出显示并执行第6-14行,我将得到输出消息 无效的对象名称“TestThis”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-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%'