标签: global-temp-tables

140
推荐指数
4
解决办法
26万
查看次数

如何查看sql server中代码创建的临时表?

##TheTable使用C#代码创建一个全局临时表(即).我希望能够在代码完全运行后在SQL Server管理工作室中看到临时表.

是否有可能做到这一点 ?如果是,那怎么样?

.net c# sql-server temp-tables global-temp-tables

14
推荐指数
3
解决办法
2万
查看次数

MS SQL Server - 安全并发使用全局临时表?

在MS SQL Server中,我使用全局临时表来存储客户端传递的会话相关信息,然后在触发器中使用该信息.

由于同一个全局临时表可以在不同的会话中使用,当我想写入它时可能存在也可能不存在(取决于之前使用它的所有先前会话是否都已关闭),我正在检查基于我在写入之前创建的全局临时表存在.

IF OBJECT_ID('tempdb..##VTT_CONTEXT_INFO_USER_TASK') IS NULL
  CREATE TABLE ##VTT_CONTEXT_INFO_USER_TASK (
    session_id    smallint,
    login_time    datetime,
    HstryUserName VDT_USERNAME,
    HstryTaskName VDT_TASKNAME,
  )

MERGE ##VTT_CONTEXT_INFO_USER_TASK As target
USING (SELECT @@SPID, @HstryUserName, @HstryTaskName) as source (session_id, HstryUserName, HstryTaskName)
ON (target.session_id = source.session_id)
WHEN MATCHED THEN
  UPDATE SET HstryUserName = source.HstryUserName, HstryTaskName = source.HstryTaskName
WHEN NOT MATCHED THEN
  INSERT VALUES (@@SPID, @LoginTime, source.HstryUserName, source.HstryTaskName);
Run Code Online (Sandbox Code Playgroud)

问题是,在检查表存在和MERGE语句之间,如果之前使用它的所有会话碰巧在该确切的实例中关闭,SQL Server可能会删除临时表(这实际上发生在我的测试中).

是否有关于如何避免这种并发问题的最佳实践,在检查它的存在与其后续使用之间不会删除表?

sql-server concurrency session race-condition global-temp-tables

5
推荐指数
1
解决办法
383
查看次数

4
推荐指数
1
解决办法
6649
查看次数

从 sp_executsql INSERT INTO 临时表

一般来说,我构建使用 sp_executsql 执行的动态 SQL 语句,如下所示:

EXEC sp_executesql @TempSQLStatement 
Run Code Online (Sandbox Code Playgroud)

我需要将返回结果行集插入某些内容(表变量或临时表),但出现以下错误:

Msg 208, Level 16, State 0, Line 1746
Invalid object name '#TempTable'.
Run Code Online (Sandbox Code Playgroud)

执行此操作后:

INSERT INTO #TempTable
EXEC sp_executesql @TempSQLStatement 
Run Code Online (Sandbox Code Playgroud)

根据我所读到的内容,我认为问题是由于我没有指定临时表的列而引起的,但我无法执行此操作,因为返回列数有所不同。

我读过我可以使用全局临时表,但我之前已经这样做过,想知道是否还有其他方法可以做到这一点。

t-sql temp-tables sp-executesql global-temp-tables

4
推荐指数
1
解决办法
1万
查看次数

带有###(三重)或更多哈希值的临时表

我们知道,在 SQL Server 中,创建一个表的#意思是“本地临时表”,##意思是“全局临时表”。

但是当我创建一个如下表时:

create table ###MyTable(IntColumn int, ValueColumn varchar(100))
Run Code Online (Sandbox Code Playgroud)

该表是本地临时表还是全局临时表?我该如何测试?当我尝试select通过:

Select * from #MyTable -- SQL said it doesn't exists
Select * from ##MyTable -- SQL said it doesn't exists
Select * from ###MyTable -- I get the output
Run Code Online (Sandbox Code Playgroud)

如果第三种情况属实,这是否意味着这是名称为 的通用表###MyTable?我不会像其他所有物理表一样在我的 SSMS 表浏览器中看到这张表吗?

如果我开始在表名前添加多个 #(哈希)会发生什么?

sql-server temp-tables global-temp-tables

4
推荐指数
2
解决办法
2892
查看次数

全球临时表

帮助我了解Global临时表的工作原理

我的进程将是线程化的,并且只需要对该线程会话可见的数据.所以我们选择了Global Temporary Table.

在完成所有线程后放弃全局临时表是否更好,或者删除表是否明智.调用此过程可能会在一天内发生一次或两次.

大约需要4张桌子

oracle multithreading global-temp-tables

0
推荐指数
1
解决办法
719
查看次数