分享兩個可以一鍵生成sql server數據庫 html格式巡檢報告的腳本

在這里插入圖片描述

方法一:使用sqlcmd

C:\>sqlcmd -S LAPTOP-25D4U18P -i C:\sqlserver_check_html.sql  -o C:\check\report.html -h-1 -f 65001

sqlserver_check_html.sql代碼如下:

SET NOCOUNT ON;
-- 修復錯誤的關鍵設置
SET QUOTED_IDENTIFIER ON;
SET ANSI_NULLS ON;
SET ANSI_PADDING ON;
SET ANSI_WARNINGS ON;
SET CONCAT_NULL_YIELDS_NULL ON;DECLARE @html NVARCHAR(MAX) = N'';
DECLARE @report_title NVARCHAR(255) = 'SQL Server 健康檢查報告';
DECLARE @servername NVARCHAR(128) = @@SERVERNAME;
DECLARE @current_time NVARCHAR(30) = CONVERT(NVARCHAR(30), GETDATE(), 120);-- 創建HTML頭部
SET @html = N'<!DOCTYPE html><html><head><meta charset="UTF-8"><title>' + @report_title + N'</title><style>body{font-family:"Segoe UI",Arial,sans-serif;margin:20px;background:#f5f7fa;color:#333}.container{max-width:1200px;margin:0 auto}.header{background:linear-gradient(135deg,#0066cc,#003366);color:white;padding:25px;border-radius:8px;margin-bottom:25px;box-shadow:0 4px 12px rgba(0,0,0,0.1)}.header h1{margin:0;font-size:28px}.header p{margin:5px 0 0;opacity:0.9}.card{background:white;border-radius:8px;padding:20px;margin-bottom:20px;box-shadow:0 2px 10px rgba(0,0,0,0.05);border-left:4px solid #0066cc;transition:transform 0.3s}.card:hover{transform:translateY(-3px);box-shadow:0 5px 15px rgba(0,0,0,0.1)}.card h2{color:#0066cc;margin-top:0;padding-bottom:10px;border-bottom:1px solid #eee;font-size:20px}table{width:100%;border-collapse:collapse;margin-top:15px}th{background:#e6f2ff;text-align:left;padding:12px 15px;font-weight:600;color:#004d99}td{padding:10px 15px;border-bottom:1px solid #eee}tr:nth-child(even){background-color:#f9fbfd}tr:hover{background-color:#f0f7ff}.warning{color:#e74c3c;font-weight:600}.footer{text-align:center;margin-top:30px;padding:20px;color:#777;font-size:14px;border-top:1px solid #eee}.section-title{display:flex;align-items:center;margin-bottom:15px}.section-title:before{content:"■";color:#0066cc;margin-right:10px;font-size:18px}</style></head><body><div class="container"><div class="header"><h1>' + @report_title + N'</h1><p>服務器: ' + @servername + N' | 生成時間: ' + @current_time + N'</p></div>';-- 1. 數據庫版本信息
SET @html = @html + N'<div class="card"><div class="section-title"><h2>1. 數據庫版本信息</h2></div><table><tr><th>屬性</th><th>值</th></tr><tr><td>SQL Server 版本</td><td>' + CAST(REPLACE(REPLACE(@@VERSION, CHAR(13), ''), CHAR(10), '<br>') AS NVARCHAR(MAX)) + N'</td></tr><tr><td>產品版本</td><td>' + CAST(SERVERPROPERTY('ProductVersion') AS NVARCHAR(128)) + N'</td></tr><tr><td>版本</td><td>' + CAST(SERVERPROPERTY('Edition') AS NVARCHAR(128)) + N'</td></tr><tr><td>Service Pack</td><td>' + CAST(SERVERPROPERTY('ProductLevel') AS NVARCHAR(128)) + N'</td></tr></table></div>';-- 2. 最大連接數
SET @html = @html + N'<div class="card"><div class="section-title"><h2>2. 最大連接數</h2></div><table><tr><th>參數</th><th>值</th></tr><tr><td>最大連接數</td><td>' + CAST(@@MAX_CONNECTIONS AS NVARCHAR(20)) + N'</td></tr></table></div>';-- 3. 活動用戶會話 - 修復FOR XML PATH選項問題
DECLARE @sessions_html NVARCHAR(MAX) = N'';
SELECT @sessions_html = @sessions_html + N'<tr>' + N'<td>' + CAST(session_id AS NVARCHAR(10)) + N'</td>' +N'<td>' + ISNULL(login_name, '') + N'</td>' +N'<td>' + ISNULL(host_name, '') + N'</td>' +N'<td>' + ISNULL(program_name, '') + N'</td>' +N'<td>' + ISNULL(status, '') + N'</td>' +N'</tr>'
FROM sys.dm_exec_sessions 
WHERE is_user_process = 1;SET @html = @html + N'<div class="card"><div class="section-title"><h2>3. 活動用戶會話</h2></div><table><tr><th>會話ID</th><th>登錄名</th><th>主機名</th><th>程序名稱</th><th>狀態</th></tr>' + @sessions_html + N'</table></div>';-- 4. 數據庫大小信息
DECLARE @dbsize_html NVARCHAR(MAX) = N'';
SELECT @dbsize_html = @dbsize_html + N'<tr>' + N'<td>' + d.name + N'</td>' +N'<td>' + CAST(ROUND(SUM(mf.size) * 8 / 1024.0, 2) AS NVARCHAR(20)) + N' MB</td>' +N'<td>' + d.state_desc + N'</td>' +N'<td>' + d.recovery_model_desc + N'</td>' +N'</tr>'
FROM sys.databases d
JOIN sys.master_files mf ON d.database_id = mf.database_id
GROUP BY d.name, d.state_desc, d.recovery_model_desc;SET @html = @html + N'<div class="card"><div class="section-title"><h2>4. 數據庫大小信息</h2></div><table><tr><th>數據庫名稱</th><th>大小 (MB)</th><th>狀態</th><th>恢復模式</th></tr>' + @dbsize_html + N'</table></div>';-- 5. 磁盤空間信息
CREATE TABLE #drives (drive CHAR(1), free_mb INT);
INSERT INTO #drives EXEC master.dbo.xp_fixeddrives;DECLARE @disks_html NVARCHAR(MAX) = N'';
SELECT @disks_html = @disks_html + N'<tr>' + N'<td>' + drive + N':</td>' +N'<td>' + CAST(CAST(free_mb/1024.0 AS DECIMAL(10,2)) AS NVARCHAR(20)) + N' GB</td>' +N'</tr>'
FROM #drives;DROP TABLE #drives;SET @html = @html + N'<div class="card"><div class="section-title"><h2>5. 磁盤空間信息</h2></div><table><tr><th>驅動器</th><th>可用空間 (GB)</th></tr>' + @disks_html + N'</table></div>';-- 6. 關鍵配置參數
DECLARE @config_html NVARCHAR(MAX) = N'';
SELECT @config_html = @config_html + N'<tr>' + N'<td>' + name + N'</td>' +N'<td>' + CAST(value AS NVARCHAR(50)) + N'</td>' +N'<td>' + CAST(value_in_use AS NVARCHAR(50)) + N'</td>' +N'</tr>'
FROM sys.configurations
WHERE name IN ('max server memory (MB)', 'min server memory (MB)', 'max degree of parallelism','cost threshold for parallelism','backup compression default'
);SET @html = @html + N'<div class="card"><div class="section-title"><h2>6. 關鍵配置參數</h2></div><table><tr><th>參數名</th><th>當前值</th><th>運行值</th></tr>' + @config_html + N'</table></div>';-- 7. 數據庫狀態概覽
DECLARE @dbstatus_html NVARCHAR(MAX) = N'';
SELECT @dbstatus_html = @dbstatus_html + N'<tr>' + N'<td>' + name + N'</td>' +N'<td>' + state_desc + N'</td>' +N'<td>' + recovery_model_desc + N'</td>' +N'<td>' + CAST([compatibility_level] AS NVARCHAR(10)) + N'</td>' +N'</tr>'
FROM sys.databases;SET @html = @html + N'<div class="card"><div class="section-title"><h2>7. 數據庫狀態概覽</h2></div><table><tr><th>數據庫</th><th>狀態</th><th>恢復模式</th><th>兼容級別</th></tr>' + @dbstatus_html + N'</table></div>';-- 8. 等待統計信息
DECLARE @waits_html NVARCHAR(MAX) = N'';
SELECT @waits_html = @waits_html + N'<tr>' + N'<td>' + wait_type + N'</td>' +N'<td>' + CAST(wait_time_ms AS NVARCHAR(50)) + N'</td>' +N'<td>' + CAST(waiting_tasks_count AS NVARCHAR(50)) + N'</td>' +N'</tr>'
FROM (SELECT TOP 10 wait_type, wait_time_ms, waiting_tasks_countFROM sys.dm_os_wait_statsWHERE wait_time_ms > 0ORDER BY wait_time_ms DESC
) AS waits;SET @html = @html + N'<div class="card"><div class="section-title"><h2>8. 等待統計信息 (TOP 10)</h2></div><table><tr><th>等待類型</th><th>等待時間 (ms)</th><th>等待任務數</th></tr>' + @waits_html + N'</table></div>';-- 9. CPU使用情況
SET @html = @html + N'<div class="card"><div class="section-title"><h2>9. CPU使用情況</h2></div><table><tr><th>指標</th><th>值</th></tr><tr><td>CPU繁忙時間</td><td>' + CAST(@@CPU_BUSY AS NVARCHAR(50)) + N' 毫秒</td></tr><tr><td>CPU空閑時間</td><td>' + CAST(@@IDLE AS NVARCHAR(50)) + N' 毫秒</td></tr><tr><td>總CPU時間</td><td>' + CAST(@@TIMETICKS AS NVARCHAR(50)) + N' 微秒/時鐘周期</td></tr></table></div>';-- 10. 阻塞進程
DECLARE @blocks_html NVARCHAR(MAX) = N'';
SELECT @blocks_html = @blocks_html + N'<tr>' + N'<td>' + CAST(session_id AS NVARCHAR(20)) + N'</td>' +N'<td>' + CAST(blocking_session_id AS NVARCHAR(20)) + N'</td>' +N'<td>' + CAST(wait_duration_ms AS NVARCHAR(20)) + N'</td>' +N'<td>' + ISNULL(wait_type, '') + N'</td>' +N'</tr>'
FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id <> 0;SET @html = @html + N'<div class="card"><div class="section-title"><h2>10. 阻塞進程</h2></div><table><tr><th>被阻塞會話</th><th>阻塞會話</th><th>等待時間 (ms)</th><th>等待類型</th></tr>' + @blocks_html + N'</table></div>';-- 完成HTML文檔
SET @html = @html + N'<div class="footer"><p>報告生成時間: ' + @current_time + N'</p><p>? SQL Server 健康檢查報告 - 自動生成</p></div></div></body></html>';-- 分段輸出避免截斷
DECLARE @ChunkSize INT = 4000;
DECLARE @StartIndex INT = 1;
DECLARE @EndIndex INT = @ChunkSize;
DECLARE @TotalLength INT = LEN(@html);WHILE @StartIndex <= @TotalLength
BEGINIF @EndIndex > @TotalLengthSET @EndIndex = @TotalLength;PRINT SUBSTRING(@html, @StartIndex, @EndIndex - @StartIndex + 1);SET @StartIndex = @EndIndex + 1;SET @EndIndex = @StartIndex + @ChunkSize - 1;
END;

方法二:直接復制在MSSM工具執行

SET NOCOUNT ON;DECLARE @html NVARCHAR(MAX) = N''
DECLARE @report_title NVARCHAR(255) = 'SQL Server 健康檢查報告'
DECLARE @servername NVARCHAR(128) = @@SERVERNAME
DECLARE @current_time NVARCHAR(30) = CONVERT(NVARCHAR(30), GETDATE(), 120)-- 創建HTML頭部
SET @html = N'
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>' + @report_title + N'</title><style>body { font-family: "Segoe UI", Arial, sans-serif; margin: 20px; background: #f5f7fa; color: #333; }.container { max-width: 1200px; margin: 0 auto; }.header { background: linear-gradient(135deg, #0066cc, #003366); color: white; padding: 25px; border-radius: 8px; margin-bottom: 25px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); }.header h1 { margin: 0; font-size: 28px; }.header p { margin: 5px 0 0; opacity: 0.9; }.card { background: white; border-radius: 8px; padding: 20px; margin-bottom: 20px; box-shadow: 0 2px 10px rgba(0,0,0,0.05); border-left: 4px solid #0066cc; transition: transform 0.3s; }.card:hover { transform: translateY(-3px); box-shadow: 0 5px 15px rgba(0,0,0,0.1); }.card h2 { color: #0066cc; margin-top: 0; padding-bottom: 10px; border-bottom: 1px solid #eee; font-size: 20px; }table { width: 100%; border-collapse: collapse; margin-top: 15px; }th { background: #e6f2ff; text-align: left; padding: 12px 15px; font-weight: 600; color: #004d99; }td { padding: 10px 15px; border-bottom: 1px solid #eee; }tr:nth-child(even) { background-color: #f9fbfd; }tr:hover { background-color: #f0f7ff; }.warning { color: #e74c3c; font-weight: 600; }.footer { text-align: center; margin-top: 30px; padding: 20px; color: #777; font-size: 14px; border-top: 1px solid #eee; }.section-title { display: flex; align-items: center; margin-bottom: 15px; }.section-title:before { content: "■"; color: #0066cc; margin-right: 10px; font-size: 18px; }</style>
</head>
<body>
<div class="container"><div class="header"><h1>' + @report_title + N'</h1><p>服務器: ' + @servername + N' | 生成時間: ' + @current_time + N'</p></div>';-- 1. 數據庫版本信息
SET @html = @html + N'
<div class="card"><div class="section-title"><h2>1. 數據庫版本信息</h2></div><table><tr><th>屬性</th><th>值</th></tr><tr><td>SQL Server 版本</td><td>' + CAST(@@VERSION AS NVARCHAR(500)) + N'</td></tr><tr><td>產品版本</td><td>' + CAST(SERVERPROPERTY('ProductVersion') AS NVARCHAR(128)) + N'</td></tr><tr><td>版本</td><td>' + CAST(SERVERPROPERTY('Edition') AS NVARCHAR(128)) + N'</td></tr><tr><td>Service Pack</td><td>' + CAST(SERVERPROPERTY('ProductLevel') AS NVARCHAR(128)) + N'</td></tr></table>
</div>';-- 2. 最大連接數
SET @html = @html + N'
<div class="card"><div class="section-title"><h2>2. 最大連接數</h2></div><table><tr><th>參數</th><th>值</th></tr><tr><td>最大連接數</td><td>' + CAST(@@MAX_CONNECTIONS AS NVARCHAR(20)) + N'</td></tr></table>
</div>';-- 3. 活動用戶會話
SET @html = @html + N'
<div class="card"><div class="section-title"><h2>3. 活動用戶會話</h2></div><table><tr><th>會話ID</th><th>登錄名</th><th>主機名</th><th>程序名稱</th><th>狀態</th></tr>';DECLARE @session_id INT, @login_name NVARCHAR(128), @host_name NVARCHAR(128), @program_name NVARCHAR(128), @status NVARCHAR(30)DECLARE session_cursor CURSOR FOR
SELECT session_id, login_name, host_name, program_name, status
FROM sys.dm_exec_sessions 
WHERE is_user_process = 1OPEN session_cursor
FETCH NEXT FROM session_cursor INTO @session_id, @login_name, @host_name, @program_name, @statusWHILE @@FETCH_STATUS = 0
BEGINSET @html = @html + N'<tr><td>' + CAST(@session_id AS NVARCHAR(10)) + N'</td><td>' + ISNULL(@login_name, N'') + N'</td><td>' + ISNULL(@host_name, N'') + N'</td><td>' + ISNULL(@program_name, N'') + N'</td><td>' + ISNULL(@status, N'') + N'</td></tr>'FETCH NEXT FROM session_cursor INTO @session_id, @login_name, @host_name, @program_name, @status
ENDCLOSE session_cursor
DEALLOCATE session_cursorSET @html = @html + N'</table></div>';-- 4. 數據庫大小信息
SET @html = @html + N'
<div class="card"><div class="section-title"><h2>4. 數據庫大小信息</h2></div><table><tr><th>數據庫名稱</th><th>大小 (MB)</th><th>狀態</th><th>恢復模式</th></tr>';DECLARE @dbname NVARCHAR(128), @dbsize_mb DECIMAL(18,2), @dbstate_desc NVARCHAR(60), @recovery_model_desc NVARCHAR(60)DECLARE db_cursor CURSOR FOR
SELECT d.name,SUM(mf.size) * 8 / 1024.0,d.state_desc,d.recovery_model_desc
FROM sys.databases d
JOIN sys.master_files mf ON d.database_id = mf.database_id
GROUP BY d.name, d.state_desc, d.recovery_model_descOPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname, @dbsize_mb, @dbstate_desc, @recovery_model_descWHILE @@FETCH_STATUS = 0
BEGINSET @html = @html + N'<tr><td>' + @dbname + N'</td><td>' + CAST(ROUND(@dbsize_mb, 2) AS NVARCHAR(20)) + N' MB</td><td>' + @dbstate_desc + N'</td><td>' + @recovery_model_desc + N'</td></tr>'FETCH NEXT FROM db_cursor INTO @dbname, @dbsize_mb, @dbstate_desc, @recovery_model_desc
ENDCLOSE db_cursor
DEALLOCATE db_cursorSET @html = @html + N'</table></div>';-- 5. 磁盤空間信息 (使用替代方法)
SET @html = @html + N'
<div class="card"><div class="section-title"><h2>5. 磁盤空間信息</h2></div><table><tr><th>驅動器</th><th>可用空間 (GB)</th></tr>';-- 使用sys.master_files估算磁盤空間
DECLARE @drive CHAR(1), @free_gb DECIMAL(10,2)CREATE TABLE #drives (drive CHAR(1) PRIMARY KEY,total_size_gb DECIMAL(10,2),used_size_gb DECIMAL(10,2)
)INSERT INTO #drives (drive, total_size_gb, used_size_gb)
SELECT LEFT(physical_name, 1) AS drive,SUM(size) * 8.0 / 1024 / 1024 AS total_size_gb,SUM(CAST(FILEPROPERTY(name, 'SpaceUsed') AS BIGINT)) * 8.0 / 1024 / 1024 AS used_size_gb
FROM sys.master_files
GROUP BY LEFT(physical_name, 1)DECLARE drive_cursor CURSOR FOR
SELECT drive, total_size_gb - used_size_gb
FROM #drivesOPEN drive_cursor
FETCH NEXT FROM drive_cursor INTO @drive, @free_gbWHILE @@FETCH_STATUS = 0
BEGINSET @html = @html + N'<tr><td>' + @drive + N':</td><td>' + CAST(ROUND(@free_gb, 2) AS NVARCHAR(20)) + N' GB (估算值)</td></tr>'FETCH NEXT FROM drive_cursor INTO @drive, @free_gb
ENDCLOSE drive_cursor
DEALLOCATE drive_cursor
DROP TABLE #drivesSET @html = @html + N'</table>
<p class="warning">注意: 由于安全限制,無法獲取精確的磁盤空間信息。以上為數據庫文件占用空間的估算值。</p>
</div>';-- 6. 關鍵配置參數
SET @html = @html + N'
<div class="card"><div class="section-title"><h2>6. 關鍵配置參數</h2></div><table><tr><th>參數名</th><th>當前值</th><th>運行值</th></tr>';DECLARE @config_name NVARCHAR(128), @config_value SQL_VARIANT, @value_in_use SQL_VARIANTDECLARE config_cursor CURSOR FOR
SELECT name, value, value_in_use
FROM sys.configurations
WHERE name IN ('max server memory (MB)', 'min server memory (MB)', 'max degree of parallelism','cost threshold for parallelism','backup compression default'
)OPEN config_cursor
FETCH NEXT FROM config_cursor INTO @config_name, @config_value, @value_in_useWHILE @@FETCH_STATUS = 0
BEGINSET @html = @html + N'<tr><td>' + @config_name + N'</td><td>' + CAST(@config_value AS NVARCHAR(50)) + N'</td><td>' + CAST(@value_in_use AS NVARCHAR(50)) + N'</td></tr>'FETCH NEXT FROM config_cursor INTO @config_name, @config_value, @value_in_use
ENDCLOSE config_cursor
DEALLOCATE config_cursorSET @html = @html + N'</table></div>';-- 7. 數據庫狀態概覽
SET @html = @html + N'
<div class="card"><div class="section-title"><h2>7. 數據庫狀態概覽</h2></div><table><tr><th>數據庫</th><th>狀態</th><th>恢復模式</th><th>兼容級別</th></tr>';DECLARE @compatibility TINYINTDECLARE db_state_cursor CURSOR FOR
SELECT name, state_desc, recovery_model_desc, [compatibility_level]
FROM sys.databasesOPEN db_state_cursor
FETCH NEXT FROM db_state_cursor INTO @dbname, @dbstate_desc, @recovery_model_desc, @compatibilityWHILE @@FETCH_STATUS = 0
BEGINSET @html = @html + N'<tr><td>' + @dbname + N'</td><td>' + @dbstate_desc + N'</td><td>' + @recovery_model_desc + N'</td><td>' + CAST(@compatibility AS NVARCHAR(10)) + N'</td></tr>'FETCH NEXT FROM db_state_cursor INTO @dbname, @dbstate_desc, @recovery_model_desc, @compatibility
ENDCLOSE db_state_cursor
DEALLOCATE db_state_cursorSET @html = @html + N'</table></div>';-- 8. 等待統計信息
SET @html = @html + N'
<div class="card"><div class="section-title"><h2>8. 等待統計信息 (TOP 10)</h2></div><table><tr><th>等待類型</th><th>等待時間 (ms)</th><th>等待任務數</th></tr>';DECLARE @wait_type NVARCHAR(60), @wait_time BIGINT, @wait_count BIGINTDECLARE wait_cursor CURSOR FOR
SELECT TOP 10 wait_type, wait_time_ms, waiting_tasks_count
FROM sys.dm_os_wait_stats
WHERE wait_time_ms > 0
ORDER BY wait_time_ms DESCOPEN wait_cursor
FETCH NEXT FROM wait_cursor INTO @wait_type, @wait_time, @wait_countWHILE @@FETCH_STATUS = 0
BEGINSET @html = @html + N'<tr><td>' + @wait_type + N'</td><td>' + CAST(@wait_time AS NVARCHAR(50)) + N'</td><td>' + CAST(@wait_count AS NVARCHAR(50)) + N'</td></tr>'FETCH NEXT FROM wait_cursor INTO @wait_type, @wait_time, @wait_count
ENDCLOSE wait_cursor
DEALLOCATE wait_cursorSET @html = @html + N'</table></div>';-- 9. CPU使用情況
SET @html = @html + N'
<div class="card"><div class="section-title"><h2>9. CPU使用情況</h2></div><table><tr><th>指標</th><th>值</th></tr><tr><td>CPU繁忙時間</td><td>' + CAST(@@CPU_BUSY AS NVARCHAR(50)) + N' 毫秒</td></tr><tr><td>CPU空閑時間</td><td>' + CAST(@@IDLE AS NVARCHAR(50)) + N' 毫秒</td></tr><tr><td>總CPU時間</td><td>' + CAST(@@TIMETICKS AS NVARCHAR(50)) + N' 微秒/時鐘周期</td></tr></table>
</div>';-- 10. 阻塞進程
SET @html = @html + N'
<div class="card"><div class="section-title"><h2>10. 阻塞進程</h2></div><table><tr><th>被阻塞會話</th><th>阻塞會話</th><th>等待時間 (ms)</th><th>等待類型</th></tr>';DECLARE @blocked_session INT, @blocking_session INT, @wait_duration BIGINT, @wait_type2 NVARCHAR(60)DECLARE block_cursor CURSOR FOR
SELECT session_id, blocking_session_id, wait_duration_ms, wait_type
FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id <> 0OPEN block_cursor
FETCH NEXT FROM block_cursor INTO @blocked_session, @blocking_session, @wait_duration, @wait_type2WHILE @@FETCH_STATUS = 0
BEGINSET @html = @html + N'<tr><td>' + CAST(@blocked_session AS NVARCHAR(20)) + N'</td><td>' + CAST(@blocking_session AS NVARCHAR(20)) + N'</td><td>' + CAST(@wait_duration AS NVARCHAR(20)) + N'</td><td>' + @wait_type2 + N'</td></tr>'FETCH NEXT FROM block_cursor INTO @blocked_session, @blocking_session, @wait_duration, @wait_type2
ENDCLOSE block_cursor
DEALLOCATE block_cursorSET @html = @html + N'</table></div>';-- 完成HTML文檔
SET @html = @html + N'<div class="footer"><p>報告生成時間: ' + @current_time + N'</p><p>? SQL Server 健康檢查報告 - 自動生成</p><p class="warning">注意: 由于安全限制,某些信息可能為估算值或不完整</p></div>
</div>
</body>
</html>';-- 輸出HTML內容
SELECT @html AS [HTML-Report];
SELECT '由于安全限制,無法自動創建文件。請復制上方HTML內容,保存為.html文件后在瀏覽器中打開查看。' AS [操作說明];

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85748.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85748.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI Gateway 介紹

AI 網關和傳統的 API 網關 API 網關發展 在最開始的時候&#xff0c;互聯網通過電話線連接上網&#xff0c;通過“調制解調器&#xff08;Modem&#xff09;”將計算機信號和電話線信號“調制”與“調解”以實現上網功能。當今時代大多使用寬帶上網&#xff0c;撥號上網已被逐…

15.3 LLaMA 3+LangChain實戰:智能點餐Agent多輪對話設計落地,訂單準確率提升90%!

LLaMA 3LangChain實戰&#xff1a;智能點餐Agent多輪對話設計落地&#xff0c;訂單準確率提升90%&#xff01; 關鍵詞&#xff1a;多輪對話設計、場景化提示工程、LLaMA 3 微調、LangChain Agent、飯店點餐場景建模 飯店點餐場景的 Agent 方案設計 通過分層架構實現復雜場景對…

EXPLAIN優化 SQL示例

以下通過 6 個真實案例展示如何使用 EXPLAIN 優化 SQL&#xff0c;每個案例包含問題 SQL、EXPLAIN 分析、優化方案和優化后效果對比&#xff1a; 案例 1&#xff1a;全表掃描優化 (typeALL) 問題 SQL&#xff08;用戶訂單查詢&#xff09;&#xff1a; SELECT * FROM orders …

「Linux文件及目錄管理」通配符與文件名

「Linux文件及目錄管理」通配符與文件名 知識點解析 通配符是Linux中用于匹配文件名的特殊字符,能高效處理批量文件操作。 常見通配符包括: *:匹配任意字符序列(包括空字符)touch a b ab a123 # 創建測試文件 ls a* # 匹配a, ab, a123?:精確匹配單個字符…

服務器配置記錄

1. 獲取服務器IP&#xff0c;用戶&#xff0c;密碼 2. 使用VS Code遠程登錄 下載ssh插件本地cmd執行ssh-keygen -t rsa -b 4096 -C "jt_windows"完成密鑰生成。本地cmd執行type %USERPROFILE%\.ssh\id_rsa.pub查看密鑰并復制。遠程服務器執行以下命令&#xff1a; …

Windows 后滲透中可能會遇到的加密字符串分析

在 Windows 后滲透過程中&#xff0c;攻擊者經常會遇到各種加密字符串或數據&#xff0c;這些數據通常用于存儲敏感信息&#xff0c;如憑據、會話票據或配置數據。理解這些加密字符串的類型、加密機制、存儲位置以及解密方法&#xff0c;對于權限提升、橫向移動和持久化至關重要…

騰訊云本地專用集群CDC:混合云架構下的分布式云服務實踐

摘要 在數字化轉型加速的背景下&#xff0c;企業上云面臨數據合規、低時延、運維復雜度等多重挑戰。騰訊云本地專用集群CDC&#xff08;Cloud Dedicated Cluster&#xff09;通過融合公有云與本地IDC優勢&#xff0c;提供近場云服務解決方案。本文基于IDC行業報告及技術實測數…

wpa_supplicant 源碼學習

代碼地址&#xff1a;git clone https://w1.fi/hostap.git 我目前學的的版本是 wpa_supplicant 2.12-devel-hostap_2_11-857-g54930b62b 五月份左右的提交&#xff0c;是較新的代碼 想做白盒測試。最近開始學習 wpa_supplicant 這個工具。 自學了一個多月吧。 整理了一些代碼跳…

[學習] C語言<string.h>中字符串函數全解析

C語言<string.h>中字符串函數全解析 在 C 語言中&#xff0c;字符串處理是程序開發中的重要組成部分。C 標準庫 <string.h> 提供了一系列函數用于操作字符數組&#xff08;即字符串&#xff09;。這些函數以 str 開頭&#xff0c;功能強大、使用廣泛&#xff0c;掌…

OJ搭建:Judge0服務器、DeepSeek服務接入簡介

序 各大OJ平臺上有很多很好的資源&#xff0c;但作為自己的“備課本”總有各種不便&#xff0c;教學生時間久了總是有一些自己的題目和想法&#xff0c;這在教初學的學生時非常突出。所以&#xff0c;很多年前就搞了一些嘗試&#xff0c;包括&#xff1a;在機房搭建ubuntu服務器…

Java的鎖機制問題

鎖機制 1.鎖監視器 在 Java 并發編程中&#xff0c;鎖監視器&#xff08;Monitor&#xff09; 是對象內部與鎖關聯的同步機制&#xff0c;用于控制多線程對共享資源的訪問。以下是核心要點&#xff1a; &#x1f512; 監視器的核心組成 獨占區&#xff08;Ownership&#xff…

老鳳祥的AI智能眼鏡:讓智慧更近生活

在科技進步的潮流中,人工智能技術不斷為我們的生活增添色彩。近日,有關字節跳動旗下的火山引擎與中國珠寶品牌老鳳祥合作開發 AI 智能眼鏡的消息引發了廣泛關注。這款與眾不同的眼鏡因其獨特的功能及技術支持,已經在業內引起了極大反響。 AI眼鏡:老年群體的智能好幫手 根…

Kotlin 中為什么沒有靜態變量和靜態方法—不用static?

Kotlin 的設計核心是&#xff1a; 一切皆對象&#xff1a;消除 static 的「非對象」特性&#xff0c;用 companion&#xff08;對象&#xff09;和頂層函數&#xff08;包級對象&#xff09;替代&#xff0c;讓代碼更統一。避免全局狀態濫用&#xff1a;static 成員是全局可見…

VSCode性能調優:從卡頓到絲滑的終極方案

? 核心價值 "這套配置使某金融核心系統VS Code內存占用從8GB降至1.2GB,加載速度提升15倍" —— 2024某銀行效能優化報告 ?? 性能瓶頸拆解 一、百萬行項目優化方案 ?? 黃金配置參數 // settings.json(核彈級優化) {"files.watcherExclude": {"…

以云織夢,渡數濟世:輝瑞與亞馬遜云科技共譜醫藥新樂章

胖頭陀科技 編輯&#xff1a;沐由 【導讀】“用合規的數據來幫助患者&#xff0c;成為患者回歸健康的一味新藥。”當下&#xff0c;在數字洪流的浪潮中&#xff0c;這味“良藥”正沿著云和AI的脈絡&#xff0c;奔向有需求的千家萬戶…… 如果說到Pfizer&#xff0c;估計十個人…

SpringBoot后端開發知識點總結(持續更新)

目錄 1. 常用易混淆注解解釋1.1 Resource和Autowired注解的區別1.2 PathVariable和RequestParam注解的區別 2. Mybatis-Plus高級特性2.1 強大的通用CRUD接口2.2 代碼生成器 3. IDEA實用快捷鍵4. 前后端聯調關鍵點4.1 代碼示例4.2 聯調要點4.3 調試技巧 1. 常用易混淆注解解釋 …

電腦商城--用戶收貨管理

新增收貨地址 1 新增收貨地址-創建數據表 1.使用use命令先選中store數據庫。 USE store; 2.在store數據庫中創建t_address用戶數據表。 CREATE TABLE t_address (aid INT AUTO_INCREMENT COMMENT 收貨地址id,uid INT COMMENT 歸屬的用戶id,name VARCHAR(20) COMMENT 收貨人姓…

開發者避坑:接入Flux-Kontext API實現文生圖、圖生圖功能

在數字化浪潮背景下&#xff0c;人工智能&#xff08;Artificial Intelligence, AI&#xff09;技術正加速重塑圖像創作領域。智創聚合API平臺近日宣布整合Flux-Kontext系列模型&#xff0c;通過API接口支持圖生圖和文生圖功能&#xff0c;為開發者及創作者提供高效解決方案。此…

.Net Core 獲取與bin目錄相同文件路徑的文件

在 .NET Core 中&#xff0c;您可以使用以下方法來獲取與 bin 目錄相同的文件路徑。通常&#xff0c;bin 目錄是應用程序編譯后生成的輸出目錄&#xff0c;您可以使用 AppContext.BaseDirectory 或 Directory.GetCurrentDirectory() 來獲取該目錄的路徑。 以下是一些常用的方法…

RN(React Native)技術應用中常出現的錯誤及解決辦法

React Native 作為跨平臺開發框架&#xff0c;在實際應用中可能會遇到一些常見的錯誤。以下是React Native 技術應用中常出現的錯誤及解決辦法&#xff1a; 1. 網絡請求失敗&#xff08;Network Request Failed&#xff09; 原因&#xff1a; 請求地址不正確網絡權限未配置i…