T-SQL Tuesday #18 – CTEs
Getting your Trinity Audio player ready...
|
Bom,,, para este mês o Sr. Bob Pusateri (twitter | Blog) escolheu o tópico Common Table Expressions (CTE).
Você não sabe o que é? Não faz ideia? Isso é mais comum do que você imagina,,, vejo muitos códigos por ai onde o pessoal de dev poderia utilizar este recurso, mas como ainda estão presos em conceitos antigos do SQL 2000 ou as vezes até mais velhos não fazem ideia de alguns novos recursos interessantes…
Para uma leitura interessante sobre este assunto acesse:
- Books Online
- Paulo R. Pereira
- Gustavo Maia Aguiar
- Quer mais? blz…
Você vai achar muita coisa voltada pra dev… mas,,, como sou mais um cada de infra,,, achei interessante este código no Site do Sr. Paul Randal (twitter | Blog) sobre wait statistics usando a sys.dm_os_wait_stats, nada muito complexo.
1: WITH Waits AS
2: (SELECT
3: wait_type,
4: wait_time_ms / 1000.0 AS WaitS,
5: (wait_time_ms - signal_wait_time_ms) / 1000.0 AS ResourceS,
6: signal_wait_time_ms / 1000.0 AS SignalS,
7: waiting_tasks_count AS WaitCount,
8: 100.0 * wait_time_ms / SUM (wait_time_ms) OVER() AS Percentage,
9: ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS RowNum
10: FROM sys.dm_os_wait_stats
11: WHERE wait_type NOT IN (
12: 'CLR_SEMAPHORE', 'LAZYWRITER_SLEEP', 'RESOURCE_QUEUE', 'SLEEP_TASK',
13: 'SLEEP_SYSTEMTASK', 'SQLTRACE_BUFFER_FLUSH', 'WAITFOR', 'LOGMGR_QUEUE',
14: 'CHECKPOINT_QUEUE', 'REQUEST_FOR_DEADLOCK_SEARCH', 'XE_TIMER_EVENT', 'BROKER_TO_FLUSH',
15: 'BROKER_TASK_STOP', 'CLR_MANUAL_EVENT', 'CLR_AUTO_EVENT', 'DISPATCHER_QUEUE_SEMAPHORE',
16: 'FT_IFTS_SCHEDULER_IDLE_WAIT', 'XE_DISPATCHER_WAIT', 'XE_DISPATCHER_JOIN', 'BROKER_EVENTHANDLER',
17: 'TRACEWRITE', 'FT_IFTSHC_MUTEX', 'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
18: 'BROKER_RECEIVE_WAITFOR', 'ONDEMAND_TASK_QUEUE', 'DBMIRROR_EVENTS_QUEUE',
19: 'DBMIRRORING_CMD', 'BROKER_TRANSMITTER', 'SQLTRACE_WAIT_ENTRIES',
20: 'SLEEP_BPOOL_FLUSH', 'SQLTRACE_LOCK')
21: )
22: SELECT
23: W1.wait_type AS WaitType,
24: CAST (W1.WaitS AS DECIMAL(14, 2)) AS Wait_S,
25: CAST (W1.ResourceS AS DECIMAL(14, 2)) AS Resource_S,
26: CAST (W1.SignalS AS DECIMAL(14, 2)) AS Signal_S,
27: W1.WaitCount AS WaitCount,
28: CAST (W1.Percentage AS DECIMAL(4, 2)) AS Percentage,
29: CAST ((W1.WaitS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgWait_S,
30: CAST ((W1.ResourceS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgRes_S,
31: CAST ((W1.SignalS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgSig_S
32: FROM Waits AS W1
33: INNER JOIN Waits AS W2 ON W2.RowNum <= W1.RowNum
34: GROUP BY W1.RowNum, W1.wait_type, W1.WaitS, W1.ResourceS, W1.SignalS, W1.WaitCount, W1.Percentage
35: HAVING SUM (W2.Percentage) - W1.Percentage < 95;
36: GO
Filed under: SQL,T-SQL Tuesday,Virtual PASS BR - @ 2011-05-10 10:57 pm
Thank you so much for submitting this post for T-SQL Tuesday!
Eu utilizo há quase 2 anos, CTE veio no SQL 2005 e ajuda muito no desenvolvimento e consultas.