sia_2007
یک شنبه 01 آذر 1388, 15:33 عصر
سلام دوستان
احساس من اینه که اگه این بخش از کار تموم بشه یه کد حسابی برای استفاده در برنامه ها به دست میآد :
دوستان هول نکنید؛ این کدها جنراله؛ تو سیستمتون بزنیدشون؛ بهتون نتیجه میده.
لازم نیست خود کد رو بخونید؛ من اصلا تو خود کد مشکلی ندارم.
ببینید من یک چنین کدی دارم :
SELECT
[Session ID] = s.session_id,
[IS User Process ?] = CONVERT(CHAR(1), s.is_user_process),
[Login] = s.login_name,
[Database] = ISNULL(db_name(p.dbid), N''),
[Application] = ISNULL(s.program_name, N''),
= ISNULL(CONVERT (varchar, w.blocking_session_id), ''),
[Head Blocker] =
CASE
-- session has an active request, is blocked, but is blocking others or session is idle but has an open tran and is blocking others
WHEN r2.session_id IS NOT NULL AND (r.blocking_session_id = 0 OR r.session_id IS NULL) THEN '1'
-- session is either not blocking someone, or is blocking someone but is blocked by another party
ELSE ''
END,
[Wait Type] = ISNULL(w.wait_type, N'')
FROM sys.dm_exec_sessions s LEFT OUTER JOIN sys.dm_exec_connections c ON (s.session_id = c.session_id)
LEFT OUTER JOIN sys.dm_exec_requests r ON (s.session_id = r.session_id)
LEFT OUTER JOIN sys.dm_os_tasks t ON (r.session_id = t.session_id AND r.request_id = t.request_id)
LEFT OUTER JOIN
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY waiting_task_address ORDER BY wait_duration_ms DESC) AS row_num
FROM sys.dm_os_waiting_tasks
) w ON (t.task_address = w.waiting_task_address) AND w.row_num = 1
LEFT OUTER JOIN sys.dm_exec_requests r2 ON (s.session_id = r2.blocking_session_id)
LEFT OUTER JOIN sys.dm_resource_governor_workload_groups g ON (g.group_id = s.group_id)
LEFT OUTER JOIN sys.sysprocesses p ON (s.session_id = p.spid)
ORDER BY S.session_id
----
به علاوه چنین کدی :
[B]SELECT SS.name FROM sys.objects AS SS
---
حال میخواهم بین این 2 Join بزنم و لامصب مشکل همین جاست :
اولی یه فیلدی داره به نام season id و دومی فیلدی داره به نام ObjectID
حال اگه بخوام یه Join منطقی بین این دو تا بزنم باید این دو تا فیلد رو به هم وصل کنم.
تا این جای کار هیچ مشکلی نیست.
مشکل اینه که اون به اصطلاح دیتایی که هم توش ObjectID هست و هم SeasonID تو چنین دستوریه :
EXEC sp_lock
چه جوری میشه بین این 3 تا کد Join برقرار کرد ؟
راهنمایی کردم؛ کلید اولی و دومی در این سومی هست.
دوستان کمک کنید؛
واقعا اگه همین یه ذرش حل بشه تمومه
میشه فهمید چه لاگینی با چه پراسسی و تحت کدوم دیتابیسی کدوم آبجکت رو گرفته و چه لاکی روش قرار داده؛
و هم چنین کی بن بست درست کرده؛ و کی علاف کیه.
ممنون میشم از همتون
احساس من اینه که اگه این بخش از کار تموم بشه یه کد حسابی برای استفاده در برنامه ها به دست میآد :
دوستان هول نکنید؛ این کدها جنراله؛ تو سیستمتون بزنیدشون؛ بهتون نتیجه میده.
لازم نیست خود کد رو بخونید؛ من اصلا تو خود کد مشکلی ندارم.
ببینید من یک چنین کدی دارم :
SELECT
[Session ID] = s.session_id,
[IS User Process ?] = CONVERT(CHAR(1), s.is_user_process),
[Login] = s.login_name,
[Database] = ISNULL(db_name(p.dbid), N''),
[Application] = ISNULL(s.program_name, N''),
= ISNULL(CONVERT (varchar, w.blocking_session_id), ''),
[Head Blocker] =
CASE
-- session has an active request, is blocked, but is blocking others or session is idle but has an open tran and is blocking others
WHEN r2.session_id IS NOT NULL AND (r.blocking_session_id = 0 OR r.session_id IS NULL) THEN '1'
-- session is either not blocking someone, or is blocking someone but is blocked by another party
ELSE ''
END,
[Wait Type] = ISNULL(w.wait_type, N'')
FROM sys.dm_exec_sessions s LEFT OUTER JOIN sys.dm_exec_connections c ON (s.session_id = c.session_id)
LEFT OUTER JOIN sys.dm_exec_requests r ON (s.session_id = r.session_id)
LEFT OUTER JOIN sys.dm_os_tasks t ON (r.session_id = t.session_id AND r.request_id = t.request_id)
LEFT OUTER JOIN
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY waiting_task_address ORDER BY wait_duration_ms DESC) AS row_num
FROM sys.dm_os_waiting_tasks
) w ON (t.task_address = w.waiting_task_address) AND w.row_num = 1
LEFT OUTER JOIN sys.dm_exec_requests r2 ON (s.session_id = r2.blocking_session_id)
LEFT OUTER JOIN sys.dm_resource_governor_workload_groups g ON (g.group_id = s.group_id)
LEFT OUTER JOIN sys.sysprocesses p ON (s.session_id = p.spid)
ORDER BY S.session_id
----
به علاوه چنین کدی :
[B]SELECT SS.name FROM sys.objects AS SS
---
حال میخواهم بین این 2 Join بزنم و لامصب مشکل همین جاست :
اولی یه فیلدی داره به نام season id و دومی فیلدی داره به نام ObjectID
حال اگه بخوام یه Join منطقی بین این دو تا بزنم باید این دو تا فیلد رو به هم وصل کنم.
تا این جای کار هیچ مشکلی نیست.
مشکل اینه که اون به اصطلاح دیتایی که هم توش ObjectID هست و هم SeasonID تو چنین دستوریه :
EXEC sp_lock
چه جوری میشه بین این 3 تا کد Join برقرار کرد ؟
راهنمایی کردم؛ کلید اولی و دومی در این سومی هست.
دوستان کمک کنید؛
واقعا اگه همین یه ذرش حل بشه تمومه
میشه فهمید چه لاگینی با چه پراسسی و تحت کدوم دیتابیسی کدوم آبجکت رو گرفته و چه لاکی روش قرار داده؛
و هم چنین کی بن بست درست کرده؛ و کی علاف کیه.
ممنون میشم از همتون