Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.18;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.01 c
15-1250232134
F$
2009-08-14 10:42
2009.10.18
Include TD32 debug info


2-1250146359
oldman
2009-08-13 10:52
2009.10.18
Запуск программы, установленной в Виндоус по умолчанию


15-1250525904
sanx
2009-08-17 20:18
2009.10.18
Где скачать FastMove?


15-1250581293
@!!ex
2009-08-18 11:41
2009.10.18
Как растянуть окно VBox на весь экран?


15-1250415445
AndreyRus
2009-08-16 13:37
2009.10.18
"Феня" компилятора