Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему не появляется сообщение об ошибке? / 12 сообщений из 12, страница 1 из 1
07.11.2019, 17:40
    #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
07.11.2019, 17:41
    #39886355
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не появляется сообщение об ошибке?
форма dmy
...
Рейтинг: 0 / 0
07.11.2019, 17:55
    #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
07.11.2019, 17:57
    #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
07.11.2019, 17:58
    #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
07.11.2019, 18:04
    #39886397
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не появляется сообщение об ошибке?
Ролг Хупин
Как этот параметр установить для сервера или базы, чтобы не каждый раз устанавливать для сессии?
Ни в коем случае не меняйте параметр базы, просто поправьте ошибку в коде! 22011763
...
Рейтинг: 0 / 0
07.11.2019, 18:27
    #39886415
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не появляется сообщение об ошибке?
Ролг Хупин,

неправильно пишете.
Надо
'2015-04-01T00:00:00.000'
или
'20150401 00:00:00.000'
...
Рейтинг: 0 / 0
07.11.2019, 21:52
    #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
07.11.2019, 23:08
    #39886517
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не появляется сообщение об ошибке?
Владимир Затуливетер,

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

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

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

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

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


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


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