如何在多个c#调用中使用临时表

Jas*_*yne 1 c# sql temp-tables

我有一个C#应用程序,使用ADO.Net连接到MSSQL

我需要创建表(具有动态列数),然后插入许多记录,然后从表中选择退出.

每个步骤必须是一个单独的C#调用,尽管我可以在一段时间内保持连接/事务处于打开状态.

小智 6

问题是#Temp 表仅存在于连接和执行范围内。当从 C# 到 SQL 的第一次调用完成时,控制传递到更高级别的范围。

这就像您有一个调用两个存储过程的 T-SQL 脚本一样。每个 SP 都创建了一个名为 #MyTable 的表。第二个 SP 引用的表与第一个 SP 完全不同。
但是,如果父 T-SQL 代码创建了该表,则两个 SP 都可以看到它,但他们不能互相看到。

这里的解决方案是使用##Temp 表。它们跨越范围和联系。但危险在于,如果您使用硬编码名称,那么同时运行的程序的两个实例可能会看到同一个表。因此,动态地将表名设置为始终唯一的名称。


Fun*_*nka 5

SQL Server中有两种类型的临时表,本地临时表和全局临时表.来自BOL:

使用单个数字符号(#tablename)作为前缀的本地临时表名称,并使用双数字符号(## tablename)作为前缀全局临时表名称.

本地临时表将适用于您当前的连接.Globals将适用于所有连接.因此,如果您在相关调用中重复使用(并且您确实说过可以)相同的连接,则可以使用本地临时表,而无需担心同时进程会干扰彼此的临时表.

您可以从BOL文章中获得更多相关信息,特别是在"临时表"部分中关于中途的信息.

祝你好运!
-F!