powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему не появляется сообщение об ошибке?
12 сообщений из 12, страница 1 из 1
Почему не появляется сообщение об ошибке?
    #39886354
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть динамический запрос, выполняется
Код: sql
1.
exec(stmt);



В нем возникает ошибка
Код: sql
1.
2.
Msg 242, Level 16, State 3, Line 11
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.



на одном сервере/базе эта ошибка появляется в SSMS, на другом на восстановленной той же базе - нету
Хотя по результатам я вижу, что ошибка есть.

В чем может быть причина?
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886355
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
форма dmy
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886365
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK
форма dmy



Как этот параметр установить для сервера или базы, чтобы не каждый раз устанавливать для сессии?
Такой запрос даёт ошибку на одной базе и не дает на второй

Код: sql
1.
select top 10 * from list where doc_date between '2015-04-01 00:00:00.000' and '2015-05-17 23:59:00.000'
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886370
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
TaPaK
форма dmy



Как этот параметр установить для сервера или базы, чтобы не каждый раз устанавливать для сессии?
Такой запрос даёт ошибку на одной базе и не дает на второй

Код: sql
1.
select top 10 * from list where doc_date between '2015-04-01 00:00:00.000' and '2015-05-17 23:59:00.000'


перестать хранить дату в строках
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886376
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
select top 10 * from list where doc_date between '20150401 00:00:00.000' and '20150517 23:59:00.000'
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886397
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Как этот параметр установить для сервера или базы, чтобы не каждый раз устанавливать для сессии?
Ни в коем случае не меняйте параметр базы, просто поправьте ошибку в коде! 22011763
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886415
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

неправильно пишете.
Надо
'2015-04-01T00:00:00.000'
или
'20150401 00:00:00.000'
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886503
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И на всякий случай правильное формирование динамического sql.
Главное правило передавайте параметры, не надо передавать значения как текст.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare @StartDate datetime = '2015-04-01 00:00:00.000' 
declare @EndDate datetime = '2015-05-17 23:59:00.000'

declare @Sql nvarchar(max) = N'
    select top 10 * 
    from dbo.list 
    where doc_date between @StartDate and @EndDate
';

declare @Params nvarchar(1000) = N'
    @StartDate datetime
  , @EndDate datetime
';    

exec sys.sp_executesql 
        @Sql
      , @Params
      , @StartDate = @StartDate
      , @EndDate = @EndDate;



Можно оформить это в и виде процедуры.
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886517
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер,

использовать формат yyyymmdd hh:mm:ss - безпроигрышный вариант
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886598
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad,

Да, но есть еще sql injections от которых тоже было бы не плохо защититься.
+ экономное кеширование планов в случае использования динамического sql с параметрами (не будет создаваться новый план на каждое новое значение параметров).
Также могут возникнуть проблемы с другими типами, например с числами с плавающей точкой.
Ну и последнее, строки, они тоже могут содержать не пойми что, как их экранировать без параметров...

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

PS: Мне если честно сложно представить кто в enterprise коде будет использовать динамический sql без параметров, для поделок студента такое еще пойдет, ну и для мазахистов...
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886601
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер
Мне если честно сложно представить кто в enterprise коде будет использовать динамический sql без параметров,
В энтерпрайзе это как раз легко представить :-)
Куча непонятно кем написанных приложений, с сомнительными исходниками, или вообще без таковых, обслуживаемые по принципу чёрного ящика, "сбойнуло - восстановили из бакапа"...
...
Рейтинг: 0 / 0
Почему не появляется сообщение об ошибке?
    #39886647
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер

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


я не против параметров, я про формат даты писал
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему не появляется сообщение об ошибке?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]