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

Откуда: Екатеринбург
Сообщений: 561
Есть процедура с параметрами типа varchar (10), с клиента получает такой параметр и в коде его преобразует в переменную типа datetime и потом все дела делает уже с этой переменной

ALTER PROCEDURE my_proc (@D1 varchar(10))
as begin
DECLARE @Date1 datetime;
SET @Date1 = CONVERT(datetime, @D1, 104);
--всякий код с переменной @Date1 ...


Или это ок?
-----
Не люблю Progress OpenEdge.
21 май 19, 11:14    [21889524]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1046
кладовщик,

Ну как минимум убиваете прослушивание параметров. Плохо ли это или хорошо зависит от запросов которые будут эту вашу переменную использовать
21 май 19, 12:12    [21889601]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36459
Грабельки раскладываете. Не то, чтобы они прям критичные, но требуют от клиентов, чтобы они всегда склеивали дату в 104 формате. Ну и 4 байта на date меньше десяти на varchar.
21 май 19, 13:32    [21889691]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
iap
Member

Откуда: Москва
Сообщений: 46862
Гавриленко Сергей Алексеевич
Грабельки раскладываете. Не то, чтобы они прям критичные, но требуют от клиентов, чтобы они всегда склеивали дату в 104 формате. Ну и 4 байта на date меньше десяти на varchar.
Тип DATE занимает 3 байта, а не 4.
21 май 19, 14:23    [21889761]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Посетитель
Member

Откуда:
Сообщений: 1384
iap
Гавриленко Сергей Алексеевич
Грабельки раскладываете. Не то, чтобы они прям критичные, но требуют от клиентов, чтобы они всегда склеивали дату в 104 формате. Ну и 4 байта на date меньше десяти на varchar.
Тип DATE занимает 3 байта, а не 4.


а есть ли трехбайтные регистры?
21 май 19, 14:56    [21889792]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6821
Посетитель,

БД вообще без разницы - какие у кого регистры. А вот место для хранения - существенно.
21 май 19, 16:18    [21889868]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Посетитель
Member

Откуда:
Сообщений: 1384
Владислав Колосов
Посетитель,

БД вообще без разницы - какие у кого регистры. А вот место для хранения - существенно.

Всё так. но какое отношение имеет размер параметра к месту для хранения?
21 май 19, 16:20    [21889871]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
iap
Member

Откуда: Москва
Сообщений: 46862
Посетитель
iap
пропущено...
Тип DATE занимает 3 байта, а не 4.


а есть ли трехбайтные регистры?
А это важно? Если речь идёт о регистрах, то упоминать о размере даты вообще бессмысленно.
Потому что нам разве не всё равно?
21 май 19, 16:35    [21889888]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Посетитель
Member

Откуда:
Сообщений: 1384
iap
Посетитель
пропущено...


а есть ли трехбайтные регистры?
А это важно? Если речь идёт о регистрах, то упоминать о размере даты вообще бессмысленно.
Потому что нам разве не всё равно?


это было не опровержение вашей поправки, я абсолютно согласен с тем, что тип date занимает 3 байта.
но если мы говорим про данную конкретную ситуацию, то параметр физически передается через стек.
и три байта, или четыре туда засунуть - без разницы.

правда, в случае со строкой туда тоже, вероятно, пойдет адрес, а не все 10 байт.
21 май 19, 16:42    [21889893]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6821
Для регистра на имеет значения, но 3 не требуют явного преобразования. В контексте вопроса - нет, не ОК, т.к. полученный результат будет зависеть от языка подключения. Могут поменяться местами день и месяц, если дату не передавать в ANSI текстовом формате.
21 май 19, 17:51    [21889967]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36459
Владислав Колосов
Для регистра на имеет значения, но 3 не требуют явного преобразования. В контексте вопроса - нет, не ОК, т.к. полученный результат будет зависеть от языка подключения. Могут поменяться местами день и месяц, если дату не передавать в ANSI текстовом формате.
Там далее конверт с указанием явного стиля.
21 май 19, 17:55    [21889973]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
uaggster
Member

Откуда:
Сообщений: 715
Гавриленко Сергей Алексеевич
Владислав Колосов
Для регистра на имеет значения, но 3 не требуют явного преобразования. В контексте вопроса - нет, не ОК, т.к. полученный результат будет зависеть от языка подключения. Могут поменяться местами день и месяц, если дату не передавать в ANSI текстовом формате.
Там далее конверт с указанием явного стиля.

Ну, значит будет падать при передаче в хранимку любой кривой даты.
Try_Convert бы хоть использовали.

кладовщик, если не секрет - зачем это?
В чем сакральный смысл?
Интересно. :-)
22 май 19, 12:37    [21890565]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
кладовщик
Member

Откуда: Екатеринбург
Сообщений: 561
uaggster
Ну, значит будет падать при передаче в хранимку любой кривой даты.
Try_Convert бы хоть использовали.

Дата не вручную вводится, а с контрола, т.е. '01.15.2019' ты не введешь, как я понимаю.
uaggster
кладовщик, если не секрет - зачем это?
В чем сакральный смысл?
Интересно. :-)

Для меня это тоже секрет. Не думаю, что дело в сниффинге параметров.
Собственно, для того и тему создал.
Быстрым гуглением не нашёл такого - чтобы дата передавалась в процедуру как текст.
Думал, у кого-то с форума встречался такой кейс.
22 май 19, 13:35    [21890688]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Диам
Member

Откуда:
Сообщений: 1351
кладовщик,

если не использовать convert, то можно в начале процедуры задавать SET Dateformat DMY
Иначе, при вызове процедуры, например, с линуксового сайта, где система использует английские параметры окружения, ваша хранимка также будет настроена на использование английских установок, т.е. дата из текста будет браться как MDY или YMD
23 май 19, 01:04    [21891386]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Кесарь
Member

Откуда:
Сообщений: 453
Лет десять работал на системе, в которой ВСЕ параметры в принципе передавались как текст.

Никаких особых проблем не было с этим.
23 май 19, 12:30    [21891779]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
iap
Member

Откуда: Москва
Сообщений: 46862
Кесарь
Лет десять работал на системе, в которой ВСЕ параметры в принципе передавались как текст.

Никаких особых проблем не было с этим.
Если клиент один и написан вами...
А если их сотни и пишутся в разных местах по всему Земному шару (или индусами на аутсорсинге!)?
Все ли будут чётко придерживаться общих правил?
23 май 19, 12:47    [21891805]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Кесарь
Member

Откуда:
Сообщений: 453
Ну это само собой. Клиент один был, конечно.

Но если система открытая, то тут нет никакого технического решения в принципе. Только организационные. Потому что, как показывает практика, косячить люди умеют и при использовании xml и json и вообще при любом способе передачи параметров.


* xml и json имеется в виду использование этих форматов для упаковки параметров в один блок.
23 май 19, 12:56    [21891821]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
iap
Member

Откуда: Москва
Сообщений: 46862
Кесарь
Ну это само собой. Клиент один был, конечно.

Но если система открытая, то тут нет никакого технического решения в принципе. Только организационные. Потому что, как показывает практика, косячить люди умеют и при использовании xml и json и вообще при любом способе передачи параметров.


* xml и json имеется в виду использование этих форматов для упаковки параметров в один блок.
В данном случае достаточно передавать дату как параметр типа DATE, а не как строку. И всё!
23 май 19, 14:19    [21891987]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6612
Кесарь
Лет десять работал на системе, в которой ВСЕ параметры в принципе передавались как текст.

Никаких особых проблем не было с этим.


а как все дружно договариваются не целые числа передавть?
23 май 19, 14:22    [21891996]     Ответить | Цитировать Сообщить модератору
 Re: Чем чревата передача в хранимую процедуру даты как varchar параметр?  [new]
Кесарь
Member

Откуда:
Сообщений: 453
TaPaK
а как все дружно договариваются не целые числа передавть?


Клиент один, проблем нет.
23 май 19, 15:08    [21892103]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить