You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:39:04