Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];

Вниз

Microsoft SQL Server и RAISERROR   Найти похожие ветки 

 
alexnmsk   (2008-11-27 10:16) [0]

Добрый день, уважаемые мастера. Вопрос к знатокам MSSQL.
Имеется хранимая процедура на сервере. Для простоты сократим код до такого:

SELECT * FROM MyTable
RAISERROR("Ошибка",16,1)

В этом случае в клиентской программе исключения не возникает. Изменим процедуру:

RAISERROR("Ошибка",16,1)
SELECT * FROM MyTable

Теперь все нормально. Подключаюсь к серверу через ADO. Проблема, как я понимаю, известная :
http://www.delphisources.ru/pages/faq/base/bde_sql_links_questions.html
см. пункт 9.
Теперь вопрос - кто-нибудь может обойти эту проблему? Можно ли сбросить результаты внутри ХП?


 
Ega23 ©   (2008-11-27 10:21) [1]


> В этом случае в клиентской программе исключения не возникает.


1. Проверь все рекордсеты, которые тебе пришли. Первым твой селект пришёл, а вот вторым, скорее всего - error.
2. А нафига какие-то действия в хп после выполнения выходного селекта? Вот хоть убей меня - не пойму.


 
alexnmsk   (2008-11-27 10:26) [2]


> 2. А нафига какие-то действия в хп после выполнения выходного
> селекта? Вот хоть убей меня - не пойму.

Это для простоты так написал. Тоже самое при любом операторе UPDATE, DELETE и т.п.


> 1. Проверь все рекордсеты, которые тебе пришли. Первым твой
> селект пришёл, а вот вторым, скорее всего - error.

А почему исключения не возникает?


 
Ega23 ©   (2008-11-27 10:52) [3]


> Это для простоты так написал. Тоже самое при любом операторе
> UPDATE, DELETE и т.п.


А ты Set NoCount On включи.

Моё глубокое ИМХО: я ещё пока не встречал задачи, где в хранимке raiserror был нужен.


 
alexnmsk   (2008-11-27 11:09) [4]

Ega23, спасибо! При открытии следующего RecordSet с ошибкой - вылетает исключение.

> Моё глубокое ИМХО: я ещё пока не встречал задачи, где в
> хранимке raiserror был нужен.

ИМХО обычное дело - например при откате транзакции выдать клиенту сообщение о неудавшейся операции


 
Ega23 ©   (2008-11-27 11:30) [5]


> ИМХО обычное дело - например при откате транзакции выдать
> клиенту сообщение о неудавшейся операции


Замечательно. Только это всё и без raiserror можно сделать.


 
Anatoly Podgoretsky ©   (2008-11-27 15:05) [6]

> alexnmsk  (27.11.2008 10:16:00)  [0]

А нафига ты используешь БДЕ


 
GRAND ©   (2008-11-27 16:43) [7]


> А нафига ты используешь БДЕ


А нафига ты используешь MS SQL?


 
ANB   (2008-11-27 16:52) [8]


> А нафига ты используешь MS SQL?

Вот с этого и надо начинать :)


 
Павел Калугин ©   (2008-12-03 16:35) [9]

> [3] Ega23 ©   (27.11.08 10:52)

Олег, как не встречал? Да на каждом шагу оно, когда проверяешь корректность ввода, или целостность данных при каком либо расчете.


 
Ega23 ©   (2008-12-03 17:29) [10]


> когда проверяешь корректность ввода, или целостность данных
> при каком либо расчете.


Я, как бы такие вещи ДО момента записи в БД проверяю обычно...


 
ANB   (2008-12-04 11:19) [11]


> Я, как бы такие вещи ДО момента записи в БД проверяю обычно.
> ..

ДО - оно в многопользовательском режиме не всегда помогает.


 
Ega23 ©   (2008-12-04 11:27) [12]


> ДО - оно в многопользовательском режиме не всегда помогает.


Я вот как-то однопользовательские режимы и не делал никогда.


 
Павел Калугин ©   (2008-12-04 12:03) [13]

> [10] Ega23 ©   (03.12.08 17:29)

ну есть разные пути. То с чем я работаю - вся бизнес-логика в ХП упакована.
Опять же все проверки это гора трафика между клиентом и сервером.


 
clickmaker ©   (2008-12-04 14:14) [14]

> Опять же все проверки это гора трафика между клиентом и
> сервером

так уж и гора?
а кидать исключения клиенту с сервера - не трафик?


 
Ega23 ©   (2008-12-04 14:34) [15]


> а кидать исключения клиенту с сервера - не трафик?


Вот-вот. И потом - по новой хп запускать.


 
Павел Калугин ©   (2008-12-04 14:38) [16]

> [14] clickmaker ©   (04.12.08 14:14)

Намного меньшая.
для сравнения при импорте биржевой сделки проверяется наличие и сответствие примерно 15-20 различных параметров

как это выглядит в описанном Олегом виде
1.прочитали строку
провели 15-20 проверок (запрос-ответ)
если все проверки пройдены
 то произвели импорт записи
перешли к 1

в моем случае
1.прочитали строку
отдали серверу
 если возникли ошибки вернули райзерор
 иначе вставили запись
перешли к 1

итого в первом случае мы по каждой записи гоняем 15-20 конструкций запрос-ответ.
Есть подозрение что кроме роста трафика это сильно увеличит время исполнения (именно на сетевой обмен)


 
Павел Калугин ©   (2008-12-04 14:39) [17]

> [15] Ega23 ©   (04.12.08 14:34)

А это как эти исключения ловить...


 
clickmaker ©   (2008-12-04 14:41) [18]

> итого в первом случае мы по каждой записи гоняем 15-20 конструкций
> запрос-ответ

зачем? можно сразу все проверить


 
Павел Калугин ©   (2008-12-04 14:54) [19]

> [18] clickmaker ©   (04.12.08 14:41)

точно? ну можно попробовать

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

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


 
Павел Калугин ©   (2008-12-04 14:59) [20]

вот я и посмотрел бы на один запрос это делающий
по сути можно. тогда это таже ХП получающая тот же наборо данных
то есть алгоритм преображается в
запустили ХП проверки с полным набором данных
получили ответ
проанализировали оный
по результатам запустили ХП денйствие, с полным набором данных
итого набор данных  (для ММВБ это 22 или 33 поля) гонялся к серверу 2 раза то есть время одного прогона запрос-ответ явно лишнее.


 
clickmaker ©   (2008-12-04 15:00) [21]

> [19] Павел Калугин ©   (04.12.08 14:54)

так в случае самого первого отлупа ввсе остальные проверки имеют смысл?
если нет, то полный набор проверок будет уж в самом тяжелом случае


 
Павел Калугин ©   (2008-12-04 15:06) [22]

> [21] clickmaker ©   (04.12.08 15:00)

естественно имеют
прользователь должен сразу видеть в чем лажа
иначе он будеит 15 -20 раз капу давить получать очередной отлуп и кричать "что за б..я система"


 
Ega23 ©   (2008-12-04 15:21) [23]


> провели 15-20 проверок (запрос-ответ)


Зачем?????

И потом - зачем именно Exception возвращать?


 
ANB   (2008-12-04 17:20) [24]


> > ДО - оно в многопользовательском режиме не всегда помогает.
>
>
>
> Я вот как-то однопользовательские режимы и не делал никогда.
>

А я не писал, что проверки ДО - это совсем плохо. Просто иногда - бессмысленно.

Самое простое - проверка на уникальность. Если проверять селектом ДО вставки, то никто не гарантирует, что за время между проверкой и вставкой никто дублирующую запись не засунет. А эксепшион - он завсегда вылезет.
Другое дело, что в случае T-SQL выполнение хранимки, скорее всего при этом не прервется . . .



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.007 c
15-1250596547
pasha_golub
2009-08-18 15:55
2009.10.18
TList.Sort из Delphi7


15-1250454604
Юрий
2009-08-17 00:30
2009.10.18
С днем рождения ! 17 августа 2009 понедельник


8-1198331423
ARTU
2007-12-22 16:50
2009.10.18
MIDI и WAVE


2-1250782279
istok20
2009-08-20 19:31
2009.10.18
createservice вызывает падение rpc...


2-1250150825
tytus
2009-08-13 12:07
2009.10.18
SNMP и Delphi 2009 - непонятки с указателем





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский