将文件导入SQL Server 2012时出错

时间:2017-05-25 06:54:00

标签: powershell sql-server-2012

我在下面有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

我用谷歌搜索了这个错误,似乎没有得到任何帮助。有人可以帮我吗?

1 个答案:

答案 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