Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заставить сервер промолчать про ошибку клиенту? / 13 сообщений из 13, страница 1 из 1
09.11.2002, 13:07:59
    #32065935
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
Я хочу в sp удалять запись если она ни с какой другой не связана или помечать ее как удаленную - в противном случае.
Для этого я пытаюсь ее удалять и если @@error <> 0 то уже помечять ее.
Но хочется чтобы sp при этом не ругалась клиенту о произошедшей ошибке
вот код процедуры, но она все равно ругается на клиенте
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE [dbo].[sa_Organizations_Delete]
	@OrgID int
AS
	SET NOCOUNT ON
	DELETE FROM [dbo].[Organizations] WHERE [OrgID] = @OrgID
	IF (@@ERROR> 0 ) 
	BEGIN
		UPDATE Organizations SET Deleted =  1 , Locked = 1   WHERE OrgID = @OrgID
		RETURN
	END
GO


Помогите, плз
...
Рейтинг: 0 / 0
09.11.2002, 13:17:20
    #32065936
tpg
tpg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
А может всё-таки лучше написать:
Код: plaintext
1.
2.
3.
4.
if exists(SELECT * FROM [dbo].[Organizations] WHERE [OrgID] = @OrgID)
      DELETE FROM [dbo].[Organizations] WHERE [OrgID] = @OrgID
else
      UPDATE Organizations SET Deleted =  1 , Locked = 1   WHERE OrgID = @OrgID
...
Рейтинг: 0 / 0
09.11.2002, 13:32:51
    #32065937
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
Неа так не пойдет - нафик мне проверять что запись существует - я и так знаю что она есть?
Процедура ругается что не может удалить запись так как в других таблицах есть дочерние записи


А может всё-таки лучше написать:
Код: plaintext
1.
2.
3.
4.
5.
А может всё-таки лучше написать: 
if exists(SELECT * FROM [dbo].[Organizations] WHERE [OrgID] = @OrgID)
      DELETE FROM [dbo].[Organizations] WHERE [OrgID] = @OrgID
else
      UPDATE Organizations SET Deleted =  1 , Locked = 1   WHERE OrgID = @OrgID 
...
Рейтинг: 0 / 0
09.11.2002, 13:35:19
    #32065938
tpg
tpg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
Блин, опять описался.

Всё дело в клиенте. Если на клиенте "заглушить" на время выполнения процедуры обработчик ошибок, то он ничего и не покажет.
...
Рейтинг: 0 / 0
09.11.2002, 13:36:58
    #32065939
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
Ну это я и так знал - я думал что это дело можно как-то рулить на сервере

Всё дело в клиенте. Если на клиенте "заглушить" на время выполнения процедуры обработчик ошибок, то он ничего и не покажет.
...
Рейтинг: 0 / 0
09.11.2002, 13:43:57
    #32065941
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
Я так понимаю у вас SQL7 ?
Тогда думаю нужно организовывать ссылочную целостность на триггерах, в которых и проверять возможность удаления родителя и осуществлять каскадное удаление и/или еще что по вашему желанию.
...
Рейтинг: 0 / 0
09.11.2002, 13:48:02
    #32065944
tpg
tpg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
Ну это я и так знал - я думал что это дело можно как-то рулить на сервере

Ну уж нет! Сообщения об ошибках разруливаются только на клиентах
...
Рейтинг: 0 / 0
10.11.2002, 08:39:52
    #32065982
mishgan2000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
>>Ну уж нет! Сообщения об ошибках разруливаются
>>только на клиентах
Это разработчики из Microsoft так решили. А вообще-то, например, в ORACLE можно обрабатывать ошибки и на сервере (для этого есть достаточно мощный механизм EXCEPTION-ов). Отсутствие такого механизма в MSSQL, имхо, одно из главных его недостатков (хотя слышал, что обещали сделать что-то подобное в след. версиях)
...
Рейтинг: 0 / 0
10.11.2002, 08:40:45
    #32065983
mishgan2000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
Автору сабжа.
В общем случае на MSSQL 7.0/2000 это невозможно.
...
Рейтинг: 0 / 0
10.11.2002, 08:51:08
    #32065984
mishgan2000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
2 Glory. Все же в общем случае это проблемы не решит.
Вот например, я хочу удалить этот объект из системы. На этот объект могут ссылаться другие объекты (какие - я не знаю). Я делаю попытку удалить этот объект. Если объект удалился - значит на него никто не ссылался. В противном случае я получаю exception на клиенте, который мне там совершенно не нужен.
В триггере на удаление все я проверить не могу (поскольку я точно не знаю, кто именно может ссылаться).
В общем сабж для меня также является большой проблемой. Хотя на ORACLE все решается запросто.
...
Рейтинг: 0 / 0
10.11.2002, 11:14:27
    #32066020
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
и все же, если известен список зависимых объектов, то вполне можно управится несколькими запросами

Код: plaintext
1.
2.
3.
UPDATE Organizations
SET Delted =  1 , Locked =  1 
WHERE OrgID = @OrgID and exists (select top  1   1  from OrgReference where OrgID = @OrgID)


что-нибудь в этом плане... либо триггерами, как говорил Glory.
...
Рейтинг: 0 / 0
10.11.2002, 12:03:08
    #32066038
mishgan2000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
2 (AAron)
Смысла не вижу так писать.
По моему достаточно:
Код: plaintext
1.
2.
UPDATE Organizations
SET Delted =  1 , Locked =  1 
WHERE OrgID = @OrgID
...
Рейтинг: 0 / 0
10.11.2002, 12:05:20
    #32066040
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить сервер промолчать про ошибку клиенту?
а... ну да, конечно.... ему ведь и так блокировать надо записи... конечно, я немного перемудрил...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заставить сервер промолчать про ошибку клиенту? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]