在同一连接上使用临时表的操作不适用于sprocs

时间:2011-02-24 07:18:04

标签: sql tsql sql-server-2008 ado.net

我有一个长期连接,应用程序在其上创建临时表并使用它来获取一些动态运行时数据。根据我的理解,只要在同一个连接上完成,就应该可以引用这个临时表。当我做一堆原始查询时,确实可能,但是使用sprocs是不可能的。我使用ADO.NET。

我错过了一些明显的东西吗?

作品


CREATE TABLE #CustomerNames (CustomerName nvarchar(200) PRIMARY KEY)
DECLARE @CustomerName nvarchar(200)
SET @CustomerName ='Joe Baker'
INSERT INTO #CustomerNames (CustomerName) VALUES (@CustomerNames)

不起作用


EXEC customerNames_createTempTable
EXEC customerNames_addCustomerName 'Joe Baker'

其中sprocs封装了查询

编辑:解决方案是使用查询在sproc之外创建临时表,然后使用sprocs对同一连接上的表执行所有操作。这样临时表不会超出范围。

2 个答案:

答案 0 :(得分:4)

自从我使用SQL Server以来已经有一段时间了,但据我所知,在存储过程中创建的临时表仅在过程执行期间存在。换句话说,它们在程序结束时被删除。

答案 1 :(得分:2)

问题是临时表的有效范围。临时表仅存在于创建表的存储过程内,并且存在于第一个sproc正在调用的所有存储过程中。因此,在您的不工作示例中,调用customerNames_createTempTable后临时表无效。

解决方案是全局临时表。这些临时表是用'#'创建的,例如## CustomerNames。但请注意:全局临时表对所有SQL Server连接都可见。所以你必须用一个唯一的名字来命名它们。

BTW:当你不再需要临时表时,明确删除它们是个好习惯。