рдЬреЗрдирдХрд┐рдиреНрд╕ SQL тАЛтАЛрд╕рд░реНрд╡рд░ рд╕реНрд╡рдЪрд╛рд▓рди: рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИ

рдЖрд░рдбреАрдПрд╕ рдХреЗ рддрд╣рдд рдлрд┐рд░ рд╕реЗ рдЬреАрд░реЛ рдЯрдЪ рдкреАрдЖрд░рдбреА рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдЬрд╛рд░реА рд░рдЦрдирд╛ ред рднрд╡рд┐рд╖реНрдп рдХреЗ рдбреАрдмреАрдП рд╕реАрдзреЗ PROD рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рдкрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕реАрдорд┐рдд рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЬреЗрдирдХрд┐рдВрд╕ рдиреМрдХрд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдбреАрдмреАрдП рдиреМрдХрд░реА рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВред



рд╕рд╛рджрд╛ рдкрд╛рда


рд╕рдмрд╕реЗ рддреБрдЪреНрдЫ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдЗрддрдиреА рд╕рд░рд▓ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ (рдЗрд╕рдХреЗ рдмрд╛рдж рд▓реЗрдЦрдХ рдлреНрд░реА рд╕реНрдЯрд╛рдЗрд▓ рдиреМрдХрд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ):



sqlcmd рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрдХрдЕрдк рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢:



рд╡реИрд╕реЗ, рд╣рдо рдпрд╣ рдирд╣реАрдВ рднреВрд▓рддреЗ рдХрд┐ RDS рдмреИрдХрдЕрдк рдХреЗ рддрд╣рдд / рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

declare @rds table (id int, task_type varchar(128), database_name sysname, pct int, duration int, lifecycle varchar(128), taskinfo varchar(max) null, upd datetime, cre datetime, s3 varchar(256), ovr int, KMS varchar(256) null) waitfor delay '00:00:20' insert into @rds exec msdb.dbo.rds_task_status @db_name='{db}' select @xid=max(id) from @rds again: waitfor delay '00:00:02' delete from @rds insert into @rds exec msdb.dbo.rds_task_status @db_name='{db}' # {db} substituted with db name by powershell select @stat=lifecycle,@info=taskinfo from @rds where id=@xid if @stat not in ('ERROR','SUCCESS','CANCELLED') goto again 

рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛, рд╕реА.рдПрд╕.рд╡реА.


рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:



рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддреА рд╣реИ рдЬрдм CSV рдореЗрдВ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдП "рд╕рд░рд▓"ред рдпрджрд┐ рдЖрдк рд▓реМрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реАрд░реНрд╖ рдПрди рд╕реАрдкреАрдпреВ рдЧрд╣рди рдкреНрд░рд╢реНрди рд╕реВрдЪреА, рддреЛ рд╕реАрдПрд╕рд╡реА рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг "рдЦреБрд░рдЪрдирд╛" рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрд╡реЗрд░реА рдкрд╛рда рдореЗрдВ рдХреЛрдИ рднреА рд╡рд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо, рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрдВрдХреНрддрд┐ рд╡рд┐рд░рд╛рдо рднреАред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЪрд╛рд╣рд┐рдПред

рд╕реБрдВрджрд░ HTML рдЯреИрдЧ


рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдПрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджреВрдВрдЧрд╛

 $Header = @" <style> TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;} TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #6495ED;} TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;} </style> "@ $Result = invoke-Sqlcmd -ConnectionString $jstr -Query "select * from DbInv" ` | Select-Object -Property * -ExcludeProperty "ItemArray", "RowError", "RowState", "Table", "HasErrors" if ($Result -eq $null) { $cnt = 0; } elseif ($Result.getType().FullName -eq "System.Management.Automation.PSCustomObject") { $cnt = 1; } else { $cnt = $Result.Rows.Count; } if ($cnt -gt 0) { $body = "<h2>My table</h2>" $Result | ConvertTo-HTML -Title "Rows" -Head $header -body $body ` | Out-File "res.log" -Append -Encoding UTF8 } else { "<h3>No data</h3>" | Out-File "res.log" -Append -Encoding UTF8 } 

рд╡реИрд╕реЗ, System.Management.Automation.PSCustomObject рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рдЬрд╛рджреВ рд╣реИ, рдЕрдЧрд░ рдЧреНрд░рд┐рдб рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд▓рд╛рдЗрди рд╣реИ, рддреЛ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рдирд┐рд░реНрдгрдп рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдмрд╣реБрдд рд╕рдордЭ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирддреАрдЬрддрди, рдЖрдкрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:



рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдбреНрд░рд╛ рдХрд░реЗрдВ


рдЪреЗрддрд╛рд╡рдиреА: рдиреАрдЪреЗ рдХреЛрдб рд╡рд┐рдХреГрдд!

SQL рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрд╝реЗрджрд╛рд░ рдХреНрд╡реЗрд░реА рд╣реИ рдЬреЛ CPU рдХреЛ рдЕрдВрддрд┐рдо N рдорд┐рдирдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреЙрдорд░реЗрдб рдореЗрдЬрд░ рдХреЛ рд╕рдм рдХреБрдЫ рдпрд╛рдж рд╣реИ! рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ:

 DECLARE @ts_now bigint = (SELECT cpu_ticks/(cpu_ticks/ms_ticks) FROM sys.dm_os_sys_info WITH (NOLOCK)); SELECT TOP(256) DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS [EventTime], SQLProcessUtilization AS [SQLCPU], 100 - SystemIdle - SQLProcessUtilization AS [OtherCPU] FROM (SELECT record.value('(./Record/@id)[1]', 'int') AS record_id, record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS [SystemIdle], record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS [SQLProcessUtilization], [timestamp] FROM (SELECT [timestamp], CONVERT(xml, record) AS [record] FROM sys.dm_os_ring_buffers WITH (NOLOCK) WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR' AND record LIKE N'%<SystemHealth>%') AS x) AS y ORDER BY 1 DESC OPTION (RECOMPILE); 

рдЕрдм рдЗрд╕ рд╕реНрд╡рд░реВрдкрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ ($ Fragment variable)
 <table style="width: 100%"><tbody><tr style="background-color: white; height: 2pt;"> <td style="width: SQLCPU%; background-color: green;"></td> <td style="width: OtherCPU%; background-color: blue;"></td> <td style="width: REST%; background-color: #C0C0C0;"></td></tr></tbody> </table> 

рд╣рдо рдкрддреНрд░ рдХреА рдмреЙрдбреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 $Result = invoke-Sqlcmd -ConnectionString $connstr -Query $Query ` | Select-Object -Property * -ExcludeProperty ` "ItemArray", "RowError", "RowState", "Table", "HasErrors" if ($Result.HasRows) { foreach($item in $Result) { $time = $itemEventTime $sqlcpu = $item.SQLCPU $other = $itemOtherCPU $rest = 100 - $sqlcpu - $other $f = $fragment -replace "SQLCPU", $sqlcpu $f = $f -replace "OtherCPU", $other $f = $f -replace "REST", $rest $f | Out-File "res.log" -Append -Encoding UTF8 } 

рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:



рдЬреА рд╣рд╛рдВ, рдорд╣рд╛рд╢рдп рдХреЛ рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдкрддрд╛ рд╣реИ! рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЗрд╕ рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ (рдЙрд╕ рдкрд░ рд▓рд┐рдЦрд╛ рд╣реБрдЖ), SQL, Xquery, HTMLред рдпрд╣ рдЕрдлрд╝рд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ HTML рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ), рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдХреЛрдб (рдЬреЛ SQL рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдХреЛ рдЪрдордХрд╛рдирд╛ рд╣рд░ рдХрд┐рд╕реА рдХрд╛ рдХрд░реНрддрд╡реНрдп рд╣реИ!

SQL рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдЯреНрд░реЗрд╕ рдЖрдЙрдЯрдкреБрдЯ


рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЯреЗрдХреНрд╕реНрдЯрдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдХреЗ рдХрд╛рд░рдг CSV рдореЗрдВ рдЯреНрд░реЗрд╕ "рдлрд┐рдЯ" рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдПрдХ рдЕрдХреНрд╖рд░ рдореЗрдВ рдЧреНрд░рд┐рдб рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рднреА рдЕрдЬреАрдм рд╣реИ - рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рд░рдг рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЕрдХреНрд╕рд░ рдпреЗ рдбреЗрдЯрд╛ рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо рдЖрд╣реНрд╡рд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╣реНрд╡рд╛рди рдХрд░рддреЗ рд╣реИрдВ- SqlCmd рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

 select SPID,EventClass,TextData, Duration,Reads,Writes,CPU, StartTime,EndTime,DatabaseName,HostName, ApplicationName,LoginName from ::fn_trace_gettable ( @filename , default ) 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреАрдмреАрдП рджреНрд╡рд╛рд░рд╛ рд╕реБрд▓рдн рдПрдХ рдЕрдиреНрдп рд╕рд░реНрд╡рд░ рдкрд░, рдПрдХ рдЦрд╛рд▓реА рдЦрд╛рд▓реА, рдПрдХ рдореЙрдбрд▓ рдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢рд╛рди рдмреЗрд╕ рд╣реИ, рдЬреЛ рд╕рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЙрд▓рдореЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рд╣рдо рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рдХреЗ рд╕рд╛рде рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ:

 $dt = Get-Date -format "yyyyMMdd" $tm = Get-Date -format "hhmmss" $tableName = $srv + "_" + $dt + "_" + $tm $copytab = "select * into " + $tableName + " from Model" invoke-SqlCmd -ConnectionString $tstr -Query $copytab 

рдФрд░ рдЕрдм рд╣рдо Data.SqlClient.SqlBulkCopy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЕрдкрдирд╛ рдЯреНрд░реЗрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рдХреЗ рдКрдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рд╣реИред рд╣рд╛рдВ, TextData рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдорд╛рд╕реНрдХ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:

 # mask data foreach ($Row in $Result) { $v = $Row["TextData"] $v = $v -replace "'([^']{2,})'", "'str'" -replace "[0-9][0-9]+", '999' $Row["TextData"] = $v } 

рд╣рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ 999 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ 'str' рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдг рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред 0 рд╕реЗ 9 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЕрдХреНрд╕рд░ рдЭрдВрдбреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рдЫреВрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЦрд╛рд▓реА рдФрд░ рдПрдХрд▓-рд╡рд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ - рдЙрдирдореЗрдВ рд╕реЗ рдЕрдХреНрд╕рд░ 'рд╡рд╛рдИ', 'рдПрди', рдЖрджрд┐ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдореЗрдВ рд░рдВрдЧ рдЬреЛрдбрд╝реЗрдВ (рд╕рдЦреНрддреА рд╕реЗ 18+)


рдЧреЛрд▓рд┐рдпреЛрдВ рдореЗрдВ рдЖрдк рдЕрдХреНрд╕рд░ рдЙрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдЦреВрди, рд╡рд┐рдЦрдВрдбрди рдХрд╛ рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░, рдЖрджрд┐ред рдмреЗрд╢рдХ, рдпрд╣ рдирдВрдЧреЗ SQL рдкрд░ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, PRINT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTML рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬреЗрдирдХрд┐рдВрд╕ рдореЗрдВ рдЖрдк HTML рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 declare @body varchar(max), @chunk varchar(max) set @body='<font face="Lucida Console" size="3">' set @body=@body+'<b>Server name: '+@@servername+'</b><br>' set @body=@body+'<br><br>' set @body=@body+'<table><tr><th>Job</th><th>Last Run</th><th>Avg Duration, sec</th><th>Last Run, Sec</th><th>Last Status</th></tr>' print @body DECLARE tab CURSOR FOR SELECT '<tr><td>'+name+'</td><td>'+ LastRun+'</td><td>'+ convert(varchar,AvgDuration)+'</td><td>'+ convert(varchar,LastDuration)+'</td><td>'+ case when LastStatus<>'Succeeded' then '<font color="red">' else '' end+ LastStatus+ case when LastStatus<>'Succeeded' then '</font>' else '' end+ +'</td><td>' from #j2 OPEN tab; FETCH NEXT FROM tab into @chunk WHILE @@FETCH_STATUS = 0 BEGIN print @chunk FETCH NEXT FROM tab into @chunk; END CLOSE tab; DEALLOCATE tab; print '</table>' 

рдореИрдВрдиреЗ рдРрд╕рд╛ рдХреЛрдб рдХреНрдпреЛрдВ рд▓рд┐рдЦрд╛ рд╣реИ?



рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рд╣реИред ConvertTo-HTML рд╣рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд░рдВрдЧреАрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо 80 рд╕реЗ рдЕрдзрд┐рдХ рдФрд░ 90 рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд╡рд┐рдЦрдВрдбрди рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╢реИрд▓рд┐рдпреЛрдВ рдЬреЛрдбрд╝реЗрдВ:

 <style> .SQLmarkup-red { color: red; background-color: yellow; } .SQLmarkup-yellow { color: black; background-color: #FFFFE0; } .SQLmarkup-default { color: black; background-color: white; } </style> 

рдХреНрдпреВрдИ рдореЗрдВ рд╣реА, рд╣рдо рдХреЙрд▓рдо рдореЗрдВ рд╕реАрдзреЗ рдПрдХ рдбрдореА рдХреЙрд▓рдо рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдХрд▓рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреЙрд▓рдо рдХреЛ SQLmarkup рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП- рдХреБрдЫ:
 case when ps.avg_fragmentation_in_percent>=90.0 then 'SQLmarkup-red' when ps.avg_fragmentation_in_percent>=80.0 then 'SQLmarkup-yellow' else 'SQLmarkup-default' end as [SQLmarkup-1], ps.avg_fragmentation_in_percent, 

рдЕрдм, Powershell рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ HTML рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдбрдореА рдХреЙрд▓рдо рдХреЛ рд╣реЗрдбрд░ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ рдФрд░ рдбреЗрдЯрд╛ рдмреЙрдбреА рдореЗрдВ рдХреЙрд▓рдо рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ рд╡реИрд▓реНрдпреВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╕рд┐рд░реНрдл рджреЛ рдХреНрд░рдореЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 $html = $html ` -replace "<th>SQLmarkup[^<]*</th>", "" ` -replace "<td>SQLmarkup-(.+?)</td><td>",'<td class="SQLmarkup-$1">' 

рдкрд░рд┐рдгрд╛рдо:



рдХреНрдпрд╛ рдпрд╣ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ? рд╣рд╛рд▓рд╛рдБрдХрд┐ рдирд╣реАрдВ, рдпрд╣ рд░рдВрдЧ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ

Source: https://habr.com/ru/post/hi447242/


All Articles