Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Почему не работает kill @переменная ? Как обойти?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
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'.

Как это дело обойти? Давно уже голову сломал Sad

PS
googl на фразу:
"Incorrect syntax near" sql kill
выдал первой строкой
http://www.experts-exchange.com/Databases/Q_21090820.html
Что в общем-то один-в-один моя задача. А для ответа просют зарегистрироваться с указанием кредитной карты и ее кода Smile. Щаз. А-га. Вот только денег на карточку брошу.
_________________
Век живи - век учись!.. Дураком помрёшь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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... Smile По барабануSad
По поводу целого. Так ведь вроде и задекларировано как 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 минут (приемлемое время ожидания), думаю, уменьшать не стОит.
Мне хочется, чтобы пользователь без моего участия (не будя меня ночью Sad ) мог "сообщить" этому скрипту, что пора отработать.

Ну или скажите же, в чём я ошибаюсь. Smile (Жалобно так) Пожа-а-алуйста! Smile
_________________
Век живи - век учись!.. Дураком помрёшь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
a-m-d



Зарегистрирован: 09.09.2004
Сообщения: 1498
Откуда: SPb

СообщениеДобавлено: Пн Сен 20 2004 10:43    Заголовок сообщения: Ответить с цитатой

Всё! Проблема решилась! Всем Smile спасибо!

"По наводке" с
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)

Что только лишний раз подтверждает мою подпись. Very Happy
_________________
Век живи - век учись!.. Дураком помрёшь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...