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

Откуда:
Сообщений: 416
Добрый день.

Есть некоторый механизм обработки введенных пользователем данных. На этапе обработки, проверяется валидность данных след. образом:
begin try set @TmpInt = @Qty end try begin catch set @ErrorStr += 'В количестве ошибка' + char(10) end catch

Однако так-же появилась необходимость проверки заранее с выводом ошибок пользователю. Ественно что хотелось бы организовать такую проверку пакетно. Однако пакетно я не могу использовать исключения. И как мне быть ?

Если определить "число/не число"(через like) или "money/ не money"(через isnumeric) еще не представляет проблемы, то с определением допустимости размера введенных данных не особо очевидно. Некоторые значения пишутся в столбцы определенных пользователем типов, размер которых со временем может и будет меняться.

Соответственно всего пользователь может ввести штук 10 переменных, которые надо проверять(на int, на money, на user-defined). И все это дело хотелось бы выполнить пакетно :) Буду рад любым идеям.
10 дек 12, 12:00    [13605349]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
Однако пакетно я не могу использовать исключения.

Почему ?
10 дек 12, 12:02    [13605369]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Exproment
Если определить ... "money/ не money"(через isnumeric) еще не представляет проблемы ...

Вы уверены? Простой пример:
select isnumeric('3e3'); -- возвращает 1
select cast('3e3' as money); -- Msg 235, Level 16, State 0, Line 2 Cannot convert a char value to money. The char value has incorrect syntax.
10 дек 12, 12:06    [13605401]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Exproment
Member

Откуда:
Сообщений: 416
Glory, это возможно ? как ? хотел проверять в скалярной функции однако try/catch в них недоступен.
10 дек 12, 12:14    [13605458]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
Glory, это возможно ? как ?

Что как ? Как писать код из нескольких команд ?
10 дек 12, 12:15    [13605466]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Exproment
Member

Откуда:
Сообщений: 416
Гость333, согласен, тогда вообще не понимаю смысла в функции isnumeric ))) не вижу её практического применения :)
10 дек 12, 12:15    [13605468]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Exproment
Member

Откуда:
Сообщений: 416
Glory, сейчас у меня выполняется пакет по всему набору и через case/when я могу проверять разные данные. Если буду проверять через исключения, даже если окутать пакет в try/catch и присваивать значения переменным, то пакет оборвется не выдав все ошибки.

Впринципе эту проблему решит курсор, однако данных много и мусолить будет долго.
10 дек 12, 12:18    [13605504]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
то пакет оборвется не выдав все ошибки.

А какой смысл определения других ошибок ?
10 дек 12, 12:21    [13605534]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Exproment
Member

Откуда:
Сообщений: 416
Glory, смысл в том, чтобы пользователю разом указать на все ошибки. Данные заносятся через грид путем на клиенте и их может быть ну просто очень много. Каждый раз инициировать проверку - пользователь умрет :)

для болле точно формулировки. В данный момент механизм проверки примерно таков:
	select	,Error =
				case 'Имя переменной'
					when 'переменная 1' then case 
						when проверяем
							then 'ошибка'
						else '' end
					when 'переменная 2' then case
						when проверяем
							then 'ошибка'
						else '' end
				else '' end
	from	Таблица
10 дек 12, 12:23    [13605575]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Exproment
Гость333, согласен, тогда вообще не понимаю смысла в функции isnumeric ))) не вижу её практического применения :)
До меня тоже не сразу дошло
ошибка при конвертации
10 дек 12, 12:23    [13605583]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Exproment
Member

Откуда:
Сообщений: 416
iap, ахах... спасибо, теперь буду спать спокойнее )))
10 дек 12, 12:27    [13605620]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
Glory, смысл в том, чтобы пользователю разом указать на все ошибки.

Для чего ? Он их сразу все запомнит и будет исправлять скопом ?

Exproment
Каждый раз инициировать проверку - пользователь умрет :)

Что мешает инициировать проверку конкретного значения сразу после его занесения ?
Это тупо заставлять заносить 100 полей, а потом объявлять, что поля 2,13, 24, 32, 56, 88 невалидные
10 дек 12, 12:29    [13605640]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Exproment
Member

Откуда:
Сообщений: 416
Glory, неправильные значения у него подсвечиваются красным цветом. В попытках не напрягать никого сутью задачи я ввел вас в заблуждение :)

Пользовательские данные изначально получаются путем импорта из xls, причем пользователь на стороне клиента может их при желании редактировать. Т.е. уже после загрузки может оказаться масса ошибок, затем при иных действиях(не суть каких) сервер получает больше информации о полях и так-же будет интерпретировать значения как ошибки(т.е. опять таки одно действие порождает много ошибок в данных)
10 дек 12, 12:38    [13605726]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Exproment
Member

Откуда:
Сообщений: 416
в концепции подхода для решения задачи я уверен и даже вижу реальное решение, через курсоры, однако все-таки надеюсь что есть лучший подход, чтоб не менять пакет на курсор
10 дек 12, 12:39    [13605742]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
Glory, неправильные значения у него подсвечиваются красным цветом.

После заполнения всех 100 полей и нажатия кнопки Submit ?
10 дек 12, 12:41    [13605763]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Exproment
Member

Откуда:
Сообщений: 416
Glory, угу
10 дек 12, 13:16    [13606102]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
AnaceH
Member

Откуда:
Сообщений: 109
Exproment,

А почему вы решили, что для валидации данных, введенных пользователям на пользовательском интерфейсе, лучше всего подходит СУБД? Почему бы не валидировать данные на пользовательском интерфейсе? Для этой цели написана масса библиотек, в том числе и под вашу платформу.

Хорошо еще, что вы не отоларинголог
10 дек 12, 14:56    [13606938]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
AnaceH
Exproment,

А почему вы решили, что для валидации данных, введенных пользователям на пользовательском интерфейсе, лучше всего подходит СУБД? Почему бы не валидировать данные на пользовательском интерфейсе? Для этой цели написана масса библиотек, в том числе и под вашу платформу.

Хорошо еще, что вы не отоларинголог


А мозг включить, и понять , что проверяется не только значение , диапазон, но зависимости между значениями введёными на клиенте и значениями в хранилище ?
10 дек 12, 15:19    [13607159]     Ответить | Цитировать Сообщить модератору
 Re: Определить валидность введенных данных для разных типов  [new]
Exproment
Member

Откуда:
Сообщений: 416
Ken@t, спасибо :)
11 дек 12, 11:46    [13611387]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить