SQL临时表中的“列名无效”

时间:2015-05-13 17:48:23

标签: c# sql-server tsql stored-procedures temp-tables

我遇到了临时表和一些SQL存储过程的一个非常奇怪的错误。在过去的几天里,我唯一能得到的错误是"Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding."在C#中提高超时阈值后(从30秒到120秒),我现在收到此错误:

"Invalid column name 'CoverageLimit'. Invalid column name 'Difference_Options'. Invalid column name 'CoverageLimit'. Invalid column name 'CoverageLimit'. Invalid column name 'CoverageLimit'. Invalid column name 'CoverageLimit'. Invalid column name 'CoverageLimit'. Invalid column name 'CoverageLimit'. Invalid column name 'Difference_Options'. Invalid column name 'Difference_Options'. Invalid column name 'CoverageLimit'."

但是,在堆栈跟踪命中的函数中调用的存储过程中引用的临时表中不存在这些列。

CREATE TABLE [dbo].[#TEMP]
(
    FormEndorsementID [int] NOT NULL,
    [Restriction] bit,
    [Description] nvarchar(3000),
    [Type] nvarchar(255),
    [QQ_Reference] nvarchar(255),
    [Values] nvarchar(255)
) ON [PRIMARY]

我对此感到很困惑,所以我执行了一个查询来查找存储过程中CoverageLimitDifference_Options的任何实例,最后在两个完全不同的存储过程中找到了这个临时表: / p>

CREATE TABLE [dbo].[#TEMP]
(
    OptionID [int] IDENTITY(1,1) NOT NULL,
    CoverageLimit int,
    Difference_Options int
) ON [PRIMARY]

(注意:我不是设置此数据库架构的人。它非常需要清理/更新。)

现在,是否存在某种范围的问题?关于这一点最奇怪的部分是我们在具有相同数据库的不同服务器上运行相同的应用程序,并且它没有遇到此错误。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果你只为临时表使用了有意义的名字,那么整个混乱可能已经并且本来应该避免。我的猜测是,由于某种原因,您的服务器无法删除其中一个临时表,这就是导致错误的原因。