Я наблюдаю странное поведение на нашем SQL Server 2014 Standard Edition (64-разрядная версия), которое не могу объяснить:
Простой оператор выбора ведет себя по-разному при выполнении вручную или с помощью задания SQL:
Оператор sql выглядит следующим образом:
[USE DB2]
GO
Select * from DB1.dbo.price p
where
p.sec_id = 10 and
p.dt = CONVERT(date,getdate() - (case when datename(dw,getdate()) = 'Monday' then 3 else 1 end))
Оператор извлекает ценовую запись из таблицы dbo.price для определенной ценной бумаги (sec_id = 10) для предыдущего рабочего дня, которая обычноЗа 1 день до этого, однако по понедельникам, это за 3 дня, так как доступны только записи о ценах в рабочие дни (1 запись о цене за ценную бумагу в течение рабочего дня).
Этот SQL-оператор встроен в хранимую процедуру, котораясам выполняется через задание агента SQL Server.
Странная вещь происходит:
- Если приведенный выше оператор SQL выполняется «вручную», то есть с помощью редактора запросов, он выдаетправильный результат, то есть одна ценовая запись возвращается при выполнении с понедельника по пятницу.
- То же самое верно, когда приведенный выше оператор SQL выполняетсяредактируется «вручную» с помощью хранимой процедуры.
- Однако, когда хранимая процедура, содержащая вышеприведенный оператор, выполняется через задание агента SQL Server, оператор возвращает ценовую запись только со вторника по пятницу.По понедельникам заявление не возвращает никаких записей.(Несмотря на то, что хранимая процедура и оператор sql возвращают запись при выполнении вручную).
Поскольку задание работает со вторника по пятницу, не должно быть никаких проблем с привилегиями и т. Д.работает, когда выполняется вручную, не должно быть никаких проблем с оператором как таковым.
Но почему он не будет работать в понедельник при выполнении с помощью задания SQL?
Кто-нибудьесть идея, в чем причина?У меня их нет, к сожалению ...
Большое спасибо за любую помощь.Приветствия