Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Глюк? / 10 сообщений из 10, страница 1 из 1
18.10.2001, 09:55
    #32015547
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк?
Столкнулся я с одним глюком, причем уже не один раз. В Stored Procedure иногда после SQL команды либо больше ничего не работает, либо, например, не срабатывает команда RAISERROR. Вот пример:

CREATE PROCEDURE ListRoomUpdate
@UID int,
@Caption varchar(50),
@RoomSquare float,
@UIDLocate int,
@UIDTypeRoom int,
@UIDParent int,

@Taxrate money,
@CountPlace float,
@UIDQuality int,
@DTActual datetime

AS

DECLARE @UIDRoomVar int

BEGIN TRANSACTION TRA

IF NOT EXISTS (SELECT UID FROM list_room WHERE ((Caption = @Caption) and (UID<>@UID))) BEGIN
UPDATE
list_room
SET
Caption=@Caption,
DTUpdate=GetDate(),
UIDParent=@UIDParent,
RoomSquare=@RoomSquare,
UIDLocate=@UIDLocate,
UIDTypeRoom=@UIDTypeRoom
WHERE
UID = @UID
END ELSE BEGIN
ROLLBACK TRANSACTION TRA
RAISERROR ('Помещение не найдено',16,1)
RETURN
END

EXEC JournalRoomVarInsert @Taxrate, @CountPlace, @UIDQuality, @DTActual, @UID, @UIDRoomVar OUT
IF (@UIDRoomVar IS NULL) BEGIN
ROLLBACK TRANSACTION TRA
END ELSE BEGIN
COMMIT TRANSACTION TRA
END
GO


Если перед командой UPDATE поставить RAISERROR (в этих же BEGIN END), он сработает, если после, не сработает.
Перед EXEC JournalRoomVarInsert не сработает, хотя данная команда отрабатывается.
...
Рейтинг: 0 / 0
18.10.2001, 11:13
    #32015551
Глюк?
А чего это я не вижу здесь "SET NOCOUNT ON" в начале процедуры? Может очки новые выписать или ... этого просто нет? Тогда ты, братец, не прав. Немедля поставь!
...
Рейтинг: 0 / 0
18.10.2001, 12:18
    #32015566
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк?
Что это такое? Можно чуть подробней, для чего это?
...
Рейтинг: 0 / 0
18.10.2001, 13:29
    #32015579
Виктор Светлов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк?
Посмотри в Books on line (т.е в хелпе на SQL-Server). Там лучше написано, чем я смогу объяснить. Короче говоря, так надо ))
...
Рейтинг: 0 / 0
18.10.2001, 13:42
    #32015582
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк?
Вообще я только разбираюсь с MSSQL, и пока гляжу на него квадратными глазами.
Кроме того, более гнустного хелпа я еще не видел.
Вообщем буду признателен за любое объяснение , хоть на пальцах, что это такое.
...
Рейтинг: 0 / 0
18.10.2001, 14:26
    #32015586
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк?
В результате выполнения процедуры могут возникнуть несколько так называемых result set-ов, т.е. результатов работы конкретных команд(SELECT, UPDATE, EXEC, ...). Например, количество записей обработанных в результате UPDATE - это отдельный result set

В связи с эти в клиентском приложении может возникнуть некоторая путаница(назовем так) насчет того, какой result set считать окончательным результатом работы процедуры. Для этого и существует команда SET NOCOUNT { ON | OFF }, которая разрешает/запрещает генерировать к каждой команде счетчик обработанных данной командой записей.

О самой команде см. BOL - Transact SQL reference - SET
Немного о поднаготной см. BOL - Building Server pplications - ODBC and SQL Server - Processing Results.

PS
А BOL все-таки хорошая вещь - просто на первый взгляд(но только на первый) кажется, что топики там размещены "неправильно", но когда внимательно прочитаешь содержимое(а также посмотришь как этот топик расположен в дереве), то понимаешь, что скорее всего ты смотрел на проблему с неправильной стороны
...
Рейтинг: 0 / 0
19.10.2001, 06:37
    #32015615
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк?
Вообщем проблема в том, что после выполнения UPDATE процедура вообще прекращает работать. Хотел бы я знать причину этого, а еще лучше, как от этого избавиться.
...
Рейтинг: 0 / 0
19.10.2001, 07:14
    #32015620
Владимир Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк?
Насколько я понял логику Вашей процедуры, Вы изменяете запись в таблице list_room
используя условие WHERE UID = @UID, но перед этим проверяете, есть ли такая запись.
В таком случае проверка должна быть не
IF NOT EXISTS (SELECT UID FROM list_room WHERE ((Caption = @Caption) and (UID<>@UID))),
а
IF EXISTS (SELECT UID FROM list_room WHERE ((Caption <> @Caption) and (UID = @UID)))
Или я что-то не понял?
...
Рейтинг: 0 / 0
19.10.2001, 07:31
    #32015624
BiSas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк?
Знаешь очень сложно разобраться не зная логики того, что ты хочешь сделать.
Может быть ты просто запутался. Если нет, то смоделируй эту ситуацию на более простом примере.
Тогда я уверен что тебе смогут обяснить, что ты неправильно делаешь.
...
Рейтинг: 0 / 0
19.10.2001, 07:51
    #32015627
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк?
>Владимир Смирнов
Нет, у меня вроде правильно, я получаю уникальный идентификатор ячейки и новый caption для него, и проверяю, а нет ли уже другой записи с этим caption , при условии, что эта запись уже может иметь такой caption (т.е. меняем его на такой же как и был).

Собственно говоря все оказалось просто и я в определенных ситуациях не устанавливал значение переменной @UIDRoomVar , что приводило к откату транзакции. Хотя ошибка с несрабатыванием RAISERROR всеж присутствовала, может глюк, а может и руки.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Глюк? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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