2015-05-13 5 views
0

Я столкнулся с очень странной ошибкой с временными таблицами и некоторыми хранимыми процедурами SQL. За последние пару дней, только ошибка я был в состоянии получить это "Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding." После повышения порога тайм-аута в C# (от 30 секунд до 120 секунд), я теперь получаю эту ошибку:«Недопустимое имя столбца» в таблице SQL temp

"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'."

Однако эти столбцы не существуют в таблице temp, на которую ссылаются в хранимой процедуре, вызываемой в функции, в которую попадает трассировка стека.

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] 

я был весьма смущен, поэтому я выполнил запрос, чтобы найти все экземпляры CoverageLimit или Difference_Options в хранимых процедурах, и в конечном итоге найти эту временную таблицу в двух совершенно другой хранимой процедуры:

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

(Примечание. Я не был тем, кто настроил эту схему базы данных. Это очень важно для очистки/обновления.)

Теперь может возникнуть проблема с какой-то областью? Самая странная часть об этом заключается в том, что у нас есть это же приложение, работающее на другом сервере с одними и теми же базами данных, и эта ошибка не встречается.

Спасибо!

+1

Есть ли вероятность, что они находятся на обычном столе, с которым вы имеете дело? Возможно, с помощью триггеров? –

+3

Возможно, вам захочется начать с присвоения имен вашим временным таблицам чем-то отличным от TEMP. Используйте значащие имена объектов. – mjw

+0

@ Dave.Gugg Сначала я просмотрел все таблицы, чтобы увидеть, существуют ли эти столбцы, и нашел их только в двух хранимых процедурах. – user1888527

ответ

2

Весь этот беспорядок мог быть и должен быть предотвращен, если вы использовали только содержательные имена для временных таблиц. Я предполагаю, что по какой-то причине ваш сервер не смог удалить одну из временных таблиц, и именно это вызывает вашу ошибку.

+2

Плохой совет - предлагать использовать табличные переменные вместо временных таблиц, когда это возможно. Они предназначены для разных целей и полезны при правильном использовании. –

+2

@ Dave.Gugg Чтобы быть справедливым, «табличные параметры» <> «переменные таблицы». –

+1

Это правда, но из моего понимания «табличные параметры» получают те же оценки плохой мощности, что и переменные таблицы, поэтому я все еще думаю, что это еще не очень хороший совет. –

Смежные вопросы