Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3984 |
Есть динамический запрос, выполняется exec(stmt); В нем возникает ошибка 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, на другом на восстановленной той же базе - нету Хотя по результатам я вижу, что ошибка есть. В чем может быть причина? |
7 ноя 19, 17:40 [22011735] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
форма dmy |
7 ноя 19, 17:41 [22011736] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3984 |
Как этот параметр установить для сервера или базы, чтобы не каждый раз устанавливать для сессии? Такой запрос даёт ошибку на одной базе и не дает на второй select top 10 * from list where doc_date between '2015-04-01 00:00:00.000' and '2015-05-17 23:59:00.000' |
||||
7 ноя 19, 17:55 [22011752] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
перестать хранить дату в строках |
||||||||
7 ноя 19, 17:57 [22011757] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5516 |
select top 10 * from list where doc_date between '20150401 00:00:00.000' and '20150517 23:59:00.000' |
7 ноя 19, 17:58 [22011763] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
|
||||
7 ноя 19, 18:04 [22011786] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Ролг Хупин, неправильно пишете. Надо '2015-04-01T00:00:00.000' или '20150401 00:00:00.000' |
7 ноя 19, 18:27 [22011813] Ответить | Цитировать Сообщить модератору |
Владимир Затуливетер Member Откуда: Сообщений: 427 |
И на всякий случай правильное формирование динамического sql. Главное правило передавайте параметры, не надо передавать значения как текст. 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; Можно оформить это в и виде процедуры. |
7 ноя 19, 21:52 [22011937] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5516 |
Владимир Затуливетер, использовать формат yyyymmdd hh:mm:ss - безпроигрышный вариант |
7 ноя 19, 23:08 [22011965] Ответить | Цитировать Сообщить модератору |
Владимир Затуливетер Member Откуда: Сообщений: 427 |
komrad, Да, но есть еще sql injections от которых тоже было бы не плохо защититься. + экономное кеширование планов в случае использования динамического sql с параметрами (не будет создаваться новый план на каждое новое значение параметров). Также могут возникнуть проблемы с другими типами, например с числами с плавающей точкой. Ну и последнее, строки, они тоже могут содержать не пойми что, как их экранировать без параметров... В общем при использовании параметров проблем значительно меньше. Поэтому я и привел пример как делать правильно специально для людей которые сюда заглянут по схожим проблемам. PS: Мне если честно сложно представить кто в enterprise коде будет использовать динамический sql без параметров, для поделок студента такое еще пойдет, ну и для мазахистов... ![]() |
8 ноя 19, 09:30 [22012096] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Куча непонятно кем написанных приложений, с сомнительными исходниками, или вообще без таковых, обслуживаемые по принципу чёрного ящика, "сбойнуло - восстановили из бакапа"... |
||||
8 ноя 19, 09:40 [22012106] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5516 |
я не против параметров, я про формат даты писал |
||||
8 ноя 19, 11:01 [22012162] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |