Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
a-m-d
Зарегистрирован: 09.09.2004 Сообщения: 1498 Откуда: SPb
|
Добавлено: Ср Сен 15 2004 14:11 Заголовок сообщения: Почему не работает kill @переменная ? Как обойти? |
|
|
Вот такой вопрос. Имеем MS SQL 7.0 sp3. Иногда требуется убить зависший процесс. Так вот из скрипта, если после kill идет цифирка в явном виде - все работает, если же переменная - нет.
т.е.
kill 59
-- работает, а
declare @spid integer
set @spid = 59 -- для примера. в реальном скрипте @spid выясняется по-другому, но ошибка та же.
kill @spid -- Ошибка
Server: Msg 170, Level 15, State 1, Line 3
Line 3: Incorrect syntax near '@spid'.
Как это дело обойти? Давно уже голову сломал
PS
googl на фразу:
"Incorrect syntax near" sql kill
выдал первой строкой
http://www.experts-exchange.com/Databases/Q_21090820.html
Что в общем-то один-в-один моя задача. А для ответа просют зарегистрироваться с указанием кредитной карты и ее кода . Щаз. А-га. Вот только денег на карточку брошу. _________________ Век живи - век учись!.. Дураком помрёшь. |
|
Вернуться к началу |
|
|
Alexandr 172
Зарегистрирован: 03.09.2004 Сообщения: 66 Откуда: Челябинск
|
Добавлено: Чт Сен 16 2004 08:37 Заголовок сообщения: |
|
|
Возможно я ошибаюсь, но попробуйте использовать другое имя для переменной, какое нибудь очень некрасивое, а то есть подозрение, что имя spid совпадает, с какой-то функцией или системной переменной. Да, и тип переменной должен целый |
|
Вернуться к началу |
|
|
a-m-d
Зарегистрирован: 09.09.2004 Сообщения: 1498 Откуда: SPb
|
Добавлено: Чт Сен 16 2004 11:40 Заголовок сообщения: |
|
|
Alexandr 172 писал(а): | Возможно я ошибаюсь, но попробуйте использовать другое имя для переменной, какое нибудь очень некрасивое, а то есть подозрение, что имя spid совпадает, с какой-то функцией или системной переменной. Да, и тип переменной должен целый |
К сожалению, ошибаешься...
Заменял @spid на @baraban... По барабану
По поводу целого. Так ведь вроде и задекларировано как integer (и в реале берётся из таблицы sysprocesses, где spid - целое)
Что ещё пробовал:
вместо просто kill:
EXECUTE ('KILL ' + CAST(@spid AS varchar))
и вот так примерно:
set @sqlkill = 'kill '+ CONVERT ( varchar (10), @spid )
exec sp_executesql @sqlkill или exec(@sqlkill)
--@sqlkill объявлял как varchar
Ешё предложения, плиз... _________________ Век живи - век учись!.. Дураком помрёшь. |
|
Вернуться к началу |
|
|
a-m-d
Зарегистрирован: 09.09.2004 Сообщения: 1498 Откуда: SPb
|
Добавлено: Пн Сен 20 2004 10:06 Заголовок сообщения: |
|
|
Сформулирую вопрос иначе.
MS SQL Server 7.0 SP3
Как снять зависший процесс из скрипта T-SQL, причем id процесса - переменная?
Есть средство помимо kill?
PS Можно, конечно, сервис sql рестартовать. Только вот если несколько рабочих баз, это плохоприменимо.
Можно изменить время, через которое процесс будет считаться зависшим и сервер сам его убъет. Но до 5-20 минут (приемлемое время ожидания), думаю, уменьшать не стОит.
Мне хочется, чтобы пользователь без моего участия (не будя меня ночью ) мог "сообщить" этому скрипту, что пора отработать.
Ну или скажите же, в чём я ошибаюсь. (Жалобно так) Пожа-а-алуйста! _________________ Век живи - век учись!.. Дураком помрёшь. |
|
Вернуться к началу |
|
|
a-m-d
Зарегистрирован: 09.09.2004 Сообщения: 1498 Откуда: SPb
|
Добавлено: Пн Сен 20 2004 10:43 Заголовок сообщения: |
|
|
Всё! Проблема решилась! Всем спасибо!
"По наводке" с
http://www.citforum.ru/database/articles/sqlservqa.shtml
Аналогичная проблема, оказывается возникает при использовании, цитирую, "оператора TOP с локальной переменной вместо фиксированного числа"
DECLARE @spid INT
DECLARE @processkiller VARCHAR(255) -- вот где похоже собака порылась.
SET @spid= 59
SET @processkiller = 'kill ' + CAST(@spid AS varchar)
EXEC (@processkiller)
Что только лишний раз подтверждает мою подпись. _________________ Век живи - век учись!.. Дураком помрёшь. |
|
Вернуться к началу |
|
|
|