PowerShell导入Excel数据创建SQL表时新增Schema列无法导入问题求助
问题原因
你的错误来源于对DataTable对象的结构认知偏差:Add-Member是PowerShell提供的扩展方法,仅会给DataTable对象本身添加PowerShell层面的自定义属性,不会在DataTable原生的**列集合(Columns)**中新增字段。而Write-DbaDbTableData读取表结构时只会识别DataTable原生的列集合,因此无法识别到你添加的Schema_Name字段,最终导致导入失败或字段丢失。
另外你代码中还存在一个隐藏问题:你定义了共享路径变量$DataSource,但连接字符串里硬编码了本地路径c:\temp\test.xlsx,实际运行时只会读取本地文件,不会读取共享文件夹的Excel。
修复后的完整代码
# 共享文件夹Excel路径 $DataSource= '\\servername\temp\test.xlsx' # 修正连接字符串的数据源为共享路径 $cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=YES';Data Source=$DataSource;Mode=Share Deny Write;Jet OLEDB:Engine Type=37;"; $cn = New-Object System.Data.OleDb.OleDbConnection $cnStr; $cn.Open() $cmd = $cn.CreateCommand() $cmd.CommandText = "SELECT * FROM [Sheet1$]" $rdr = $cmd.ExecuteReader(); $dt = new-object System.Data.DataTable $dt.Load($rdr) $Database_Name = 'DBTest' $Table_Name = 'Tbltest' $Schema_Name = 'Schematest' # -------------- 核心修正部分 -------------- # 1. 给DataTable原生列集合新增Schema_Name列,指定数据类型为字符串 $dt.Columns.Add("Schema_Name", [string]) | Out-Null # 2. 遍历所有行,给新增列赋值 foreach ($row in $dt.Rows) { $row["Schema_Name"] = $Schema_Name } # -------------- 核心修正部分 -------------- # 可选:如果需要把表建在指定的Schema下(而非默认dbo),将-table参数值改为 "$Schema_Name.$Table_Name" # 注意:提前在SQL实例中创建好对应Schema,否则自动建表会报错 $dt | Write-DbaDbTableData -SqlInstance 'servername' -Database $Database_Name -Table $Table_Name -AutoCreateTable
验证方法
导入完成后在SQL中执行以下查询,确认字段和数据正常:
SELECT * FROM DBTest.dbo.Tbltest -- 如果指定了自定义Schema,执行: -- SELECT * FROM DBTest.Schematest.Tbltest
内容的提问来源于stack exchange,提问作者SakZepelin
相关产品推荐
相关产品推荐

