![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
результат работы sp_lock в таблицу [D7, MSSQL]
NewDelpher © (2004-09-01 08:49:00)Не ругайте сильно за ламерство, ну никак не могу придумать, как мне результат работы exec sp_lock представить в виде "нормальной" таблицы, чтобы иметь возможность джойнить к ней другие или вызывать object_name() для каждого значения ObjID
KSergey (2004-09-02 07:58:00) [1]> [11] jocko (01.09.04 15:47)
> я бы посоветовал посмотреть всетаки как устроена sp_lock
> (а устроена она просто) и к селектику что там сидит добавить
> нужные джойны
Я бы настоятельно не советовал, особенно если используемые внутри таблицы - недокументированы.
Можно влететь на фиг знает какой глюк.
Да и временные таблицы - это нормально для сервера.
jocko (2004-09-01 15:47:00) [2]я бы посоветовал посмотреть всетаки как устроена sp_lock (а устроена она просто) и к селектику что там сидит добавить нужные джойны
Вообще эта процедура показывает, если я не ошибаюсь список блокированных пользователей, так какого фига извиняюсь еще и плодить временные таблицы в tempdb, вообще то все блокировки с нее чаще всего и начинаются :)
Nikky (2004-09-01 11:56:00) [3]У меня такая фигня на серваке :)
create table #T (
spid int,
dbid int,
ObjId int,
IndId int,
Type char (100),
Resource char (100),
Mode char (100),
Status char (100))
insert into #T (spid, dbid, ObjId, IndId, Type, Resource, Mode, Status) exec sp_lock
select
#T.spid as [Process Id],
#T.dbid as [Database],
SP.hostname as [Host],
SP.program_name as [Application],
SP.cmd as [Activity],
SU.name as [Login],
IsNULL (SO.name, 'No object reference') as [Object]
from #T
left join sysobjects SO (nolock) on #T.ObjId = SO.id
left join master..sysprocesses SP (nolock) on #T.spid = SP.spid
left join sysusers SU (nolock) on SP.uid = SU.uid
where IsNULL (#T.ObjId, 0) <> 0
Ega23 (2004-09-01 11:22:00) [4]Бывает... МS DDK читать - вааще отдельная песня...
KSergey (2004-09-01 11:20:00) [5]> [7] Ega23 © (01.09.04 10:47)
Про типы я в том смысле, что справка не соответствует действительности.
Ega23 (2004-09-01 10:47:00) [6]Только скобочек не надо в п.2 - а так все хорошо ;)
Я по-памяти писал, у меня всегда с этим напряги: где скобочки, где параметр какой забуду :о)
Вот только с типами полей мне не совсем понятно (читаю BOL от MSSQL7)
В 2000-м как-то можно таблицу в качестве параметра получить и курсор по полям прокрутить, или что-то в этом роде. По-позже посмотрю, сейчас со временем вилы...
KSergey (2004-09-01 10:21:00) [7]> [3] Ega23 © (01.09.04 09:50)
Ага, спасибо. Точно. Наконец-то я это узнал! ;)
Только скобочек не надо в п.2 - а так все хорошо ;)
Вот только с типами полей мне не совсем понятно (читаю BOL от MSSQL7)
Написано Status тип int, а он - nvarchar на самом деле...
NewDelpher (2004-09-01 10:08:00) [8]Заработало. Скобки надо было убрать из
Insert into #ttt (exec sp_lock)
NewDelpher (2004-09-01 09:58:00) [9]> Ega23 © (01.09.04 09:50) [3]
> 1. Создаёшь временную таблицу с полями, получаемыми в результате
> выполнения sp_lock
> 2. Insert into #ttt (exec sp_lock)
> 3. Работаешь с #ttt
> 4. Drop table #ttt
Не работает, выдает:
Incorrect syntax near the keyword 'exec'
Ega23 (2004-09-01 09:50:00) [10]1. Создаёшь временную таблицу с полями, получаемыми в результате выполнения sp_lock
2. Insert into #ttt (exec sp_lock)
3. Работаешь с #ttt
4. Drop table #ttt
NewDelpher (2004-09-01 09:32:00) [11]KSergey ©
Ну курсор-то всё равно создается на основе селекта? Или я не прав?
KSergey (2004-09-01 09:20:00) [12]Если не ошибаюсь - курсором как-то можно
Но как?.. Не знаю... Да и не всю выборку, получается..
Короче напрямую - никак