PayrollManagementSystem/scripts/tplus/inventory_tplus_database.ps1

75 lines
2.7 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$DatabaseName,
[string]$ContainerName = "ys-tplus-sqlserver-dev",
[string]$ReportRoot = "D:\work\app\tplus-sqlserver\reports",
[Parameter(Mandatory = $true)]
[SecureString]$SaPassword
)
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
. (Join-Path $PSScriptRoot "container_sql.ps1")
New-Item -ItemType Directory -Path $ReportRoot -Force | Out-Null
$reportPath = Join-Path $ReportRoot ("Tplus-核验-{0:yyyyMMdd-HHmmss}.md" -f (Get-Date))
$safeDatabaseIdentifier = $DatabaseName.Replace("]", "]]" )
$safeDatabaseLiteral = $DatabaseName.Replace("'", "''")
$sql = @"
USE [$safeDatabaseIdentifier];
SET NOCOUNT ON;
SELECT 'DATABASE' AS section_name, DB_NAME() AS item_name, CAST(SUM(size) * 8.0 / 1024 AS varchar(64)) AS detail
FROM sys.database_files;
SELECT 'TABLE' AS section_name, s.name + '.' + t.name AS item_name,
CAST(SUM(p.rows) AS varchar(64)) AS detail
FROM sys.tables t
JOIN sys.schemas s ON s.schema_id = t.schema_id
LEFT JOIN sys.partitions p ON p.object_id = t.object_id AND p.index_id IN (0, 1)
GROUP BY s.name, t.name
ORDER BY s.name, t.name;
SELECT 'COLUMN' AS section_name,
s.name + '.' + t.name + '.' + c.name AS item_name,
ty.name + '(' + CAST(c.max_length AS varchar(16)) + ')' AS detail
FROM sys.columns c
JOIN sys.tables t ON t.object_id = c.object_id
JOIN sys.schemas s ON s.schema_id = t.schema_id
JOIN sys.types ty ON ty.user_type_id = c.user_type_id
ORDER BY s.name, t.name, c.column_id;
SELECT 'VIEW' AS section_name, s.name + '.' + v.name AS item_name, 'view' AS detail
FROM sys.views v JOIN sys.schemas s ON s.schema_id = v.schema_id
ORDER BY s.name, v.name;
SELECT 'PROCEDURE' AS section_name, s.name + '.' + p.name AS item_name, 'procedure' AS detail
FROM sys.procedures p JOIN sys.schemas s ON s.schema_id = p.schema_id
ORDER BY s.name, p.name;
"@
$output = Invoke-TPlusContainerSql -ContainerName $ContainerName -Sql $sql -SaPassword $SaPassword
$header = @(
"# T+ 数据库恢复核验报告",
"",
"- 数据库:$DatabaseName",
"- 容器:$ContainerName",
"- 核验时间:$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')",
"- 数据目录:D:\work\app\tplus-sqlserver\data",
"- 日志目录:D:\work\app\tplus-sqlserver\log",
"",
"## 查询结果",
"",
'```text'
)
$footer = @(
'```',
"",
"## 后续核对",
"",
"- 对照 T+ 12.3 字段映射草案核对六类源表。",
"- 记录更新时间字段、关联键、负向单据和枚举值。",
"- 未确认字段不得直接写入工资业务表。"
)
($header + @($output) + $footer) | Set-Content -LiteralPath $reportPath -Encoding utf8
Write-Host "核验报告已生成:$reportPath"