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