Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
Здравствуйте.
Скажите, пожалуйста, почему клиент возвращает ошибку при запуске данной хранимой процедуры, а
в Query Analyzer она без ошибок.
Если вместо данного кода вставить закоментированный, то клиент успешно её запускает.
Может быть какая то некорректонсть преобразования даты в строку?
Заранее спасибо.
CREATE PROCEDURE CopyHourVals AS
declare @tmp_dat datetime 
--из текущей даты получаем точку последнего часа,
--обрезая минуты и секунды
select @tmp_dat = dateadd(mi, -datepart(mi, getdate()), getdate())
select @tmp_dat = dateadd(second, -datepart(second, @tmp_dat), @tmp_dat)
--далее преобразуем даты в формат ODBC и 
--копируем часовые значение из таблицы данных
insert into HourVal  
	select * from RawData
	where convert(char(20), RawData.TimeCalc, 120) = convert(char(20), @tmp_dat, 120)
GO
/*insert into  HourVal 
	select * from RawData
	where datepart(month,TimeCalc) = 8 AND datepart(day,TimeCalc) = 20 AND datepart(hour,TimeCalc) = 17*/
Всего наилучшего, пока.
20 авг 09, 19:26    [7563919]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
Обращаюсь к базе через ADO.
20 авг 09, 19:32    [7563933]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
OLEG_2005
Здравствуйте.
Скажите, пожалуйста, почему клиент возвращает ошибку при запуске данной хранимой процедуры,

А ошибку нужно угадать ?

ЗЫ
И зачем для сравнения типов @tmp_dat вы приводите их к char(20) ?
20 авг 09, 19:43    [7563952]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
Надо будет извлечь информацию об ошибке. Просто меня удивило, что в Query Analyzer она работает, у клиента нет.
20 авг 09, 19:46    [7563959]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
Glory
OLEG_2005
Здравствуйте.
Скажите, пожалуйста, почему клиент возвращает ошибку при запуске данной хранимой процедуры,

А ошибку нужно угадать ?

ЗЫ
И зачем для сравнения типов @tmp_dat вы приводите их к char(20) ?

Пардон, код хранимой процедуры писал не я. Просто в клиентской программе возникла проблема с её вызовом. А в этом привидении есть что-то криминальное?
20 авг 09, 19:48    [7563964]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
Просто в условии нужно выбрать даты, которых совпадает всё кроме миллисекунд. Наверное можно было бы преобразовать дату в строку и обрезать часть с миллисекундами.
20 авг 09, 19:50    [7563968]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
Michael_N
Member

Откуда: Белокуриха, АК
Сообщений: 150
OLEG_2005,

очевидно, проблема возникает при передаче параметра с клиента. Так говорит мой хрустальный шар. :-) Отсюда и копайте.
21 авг 09, 07:15    [7564608]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
Michael_N
OLEG_2005,

очевидно, проблема возникает при передаче параметра с клиента. Так говорит мой хрустальный шар. :-) Отсюда и копайте.


Так хранимая процедура без параметров.
21 авг 09, 08:17    [7564654]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Пока мы не узнаем ошибку вызова с клиента, отловленную, например, профайлером, можно долго тыкать пальцем в небо.
21 авг 09, 08:40    [7564679]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
Ошибка такая:
Error source: Microsoft OLE DB Provider for SQL Server
Error code: 0x80040e31
Error message: Время ожидания истекло 21/08/2009 08:52:48
21 авг 09, 09:03    [7564731]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
OLEG_2005
Ошибка такая:
Error source: Microsoft OLE DB Provider for SQL Server
Error code: 0x80040e31
Error message: Время ожидания истекло 21/08/2009 08:52:48


Ну так увеличьте таймаут на клиенте.
21 авг 09, 09:05    [7564742]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
pkarklin
OLEG_2005
Ошибка такая:
Error source: Microsoft OLE DB Provider for SQL Server
Error code: 0x80040e31
Error message: Время ожидания истекло 21/08/2009 08:52:48


Ну так увеличьте таймаут на клиенте.


А не подскажите, как?
21 авг 09, 09:17    [7564774]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
OLEG_2005
А не подскажите, как?


Гм... Нам ничего не известно, что у Вас за клиент, начем написан и какие компоненты доступа к данным используются.
21 авг 09, 09:23    [7564792]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
Клиент написан на VC++, с используется ADO.
#import "c:\program files\common files\system\ado\msado15.dll" rename_namespace("adb2") rename ("EOF", "adoEOF")
21 авг 09, 09:32    [7564822]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
См. свойство CommandTimeout у объекта Command.
21 авг 09, 09:40    [7564851]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
pkarklin
См. свойство CommandTimeout у объекта Command.


Спасибо, посмотрю.
21 авг 09, 09:42    [7564863]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
Установил тай-аут, вроде заработало. Поэкспериментирую ещё. Наверно база сильно разрослась и запрос стал выполняться долго.
Хотелось бы узнать какой тайм-аут вы устанавливает в своих программах?
21 авг 09, 10:42    [7565208]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
OLEG_2005
Установил тай-аут, вроде заработало. Поэкспериментирую ещё. Наверно база сильно разрослась и запрос стал выполняться долго.
Хотелось бы узнать какой тайм-аут вы устанавливает в своих программах?

Тот, который удовлетворяет пользователя.
21 авг 09, 10:56    [7565307]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Если по TimeCalc есть индекс, то лучше будет так:
select @tmp_dat=dateadd(hh,datediff(hh,'19000101',getdate()),'19000101')
insert into HourVal  
	select * from RawData
	where RawData.TimeCalc>= @tmp_dat and RawData.TimeCalc<dateadd(hh,1,@tmp_dat)

Переводом даты в строку вы убиваете возможность поиска по индексу.
21 авг 09, 11:28    [7565625]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
OLEG_2005
Member

Откуда:
Сообщений: 1715
Anddros
Если по TimeCalc есть индекс, то лучше будет так:
select @tmp_dat=dateadd(hh,datediff(hh,'19000101',getdate()),'19000101')
insert into HourVal  
	select * from RawData
	where RawData.TimeCalc>= @tmp_dat and RawData.TimeCalc<dateadd(hh,1,@tmp_dat)

Переводом даты в строку вы убиваете возможность поиска по индексу.


Спасибо, за совет. Но у таблицы HourVal есть почему-то только индекс по полям TimeCalc, IDData.
Поэтому в данном случае, индекс всё равно не сработает. БД разрабатывалась не мной.
21 авг 09, 11:45    [7565785]     Ответить | Цитировать Сообщить модератору
 Re: странное поведение хранимой процедуры в MS SQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
OLEG_2005


Спасибо, за совет. Но у таблицы HourVal есть почему-то только индекс по полям TimeCalc, IDData.
Поэтому в данном случае, индекс всё равно не сработает. БД разрабатывалась не мной.

При where convert(char(20), RawData.TimeCalc, 120) = convert(char(20), @tmp_dat, 120) точно не сработает
При RawData.TimeCalc>= @tmp_dat and RawData.TimeCalc<dateadd(hh,1,@tmp_dat) возможно и сработает
Точный ответ даст план выполнения
21 авг 09, 11:48    [7565816]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить