我在下面有power-shell代码,尝试将excel文件导入DB1。
$dir = "\\server\folder\"
$latest = Get-ChildItem -Path $dir | Where-Object {$_.name -like "*Notes*"} | Sort-Object LastWriteTime -Descending | Select-Object -First 1
Write-Output "The latest file is: $latest"
Write-SqlTableData -ServerInstance "instance1" -DatabaseName "DB1" -SchemaName dbo -TableName Table1 -InputData $latest -Force
运行此代码时遇到错误,请参阅下文:
Write-SqlTableData : A mapping between .Net type 'System.IO.DirectoryInfo' and SQL type for column 'Directory' was not found. Consider removing the column with that type and repeat the operation
我用谷歌搜索了这个错误,似乎没有得到任何帮助。有人可以帮我吗?
答案 0 :(得分:0)
错误很明显;你需要
Get-ChildItem
输出缩小到文件(例如.xsl
或.xslx
),并且-InputData
$latest.Name
字符串,而不是$latest
类型的System.IO.FileSystemInfo
对象(据说:它&# 39; s 仅我的猜测,没有安装与SQL相关的cmdlet。)$dir = "\\server\folder\"
$latest = Get-ChildItem -Path $dir |
Where-Object {$_.name -like "*Notes*.xsl*"} |
Sort-Object LastWriteTime -Descending | Select-Object -First 1
Write-Output "The latest file is: $latest"
Write-SqlTableData -ServerInstance "instance1" -DatabaseName "DB1" -SchemaName dbo -TableName Table1 -InputData $latest.Name -Force
或代替Where-Object
,使用-Filter parameter作为Get-ChildItem
cmdlet
$latest = Get-ChildItem -Path $dir -Filter "*Notes*.xsl*" |
Sort-Object LastWriteTime -Descending | Select-Object -First 1
<强> -Filter 强>
以提供者的格式或语言指定过滤器。的价值 此参数限定Path参数。过滤器的语法, 包括使用通配符,取决于提供者。过滤器是 比其他参数更有效,因为提供者适用 它们在检索对象时而不是Windows PowerShell从中检索对象后对其进行过滤 提供商。
请注意,-InputData
参数可能单引号$latest.FullName
:
Write-SqlTableData -ServerInstance "instance1" … -InputData
"'$($latest.FullName)'"
-Force