PayrollManagementSystem/scripts/tplus/inventory_tplus_database.ps1

75 lines
2.7 KiB
PowerShell
Raw Normal View History

[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"