SQL Server / PowerShell:批量插入问题

时间:2018-08-09 02:15:03

标签: sql sql-server powershell

我在Powershell中的代码:

Function AutoImportCommaFlatFiles($location, $file, $extension, $server, $database)
{
    $full = $location + $file + $extension
    $all = Get-Content $full

    $columns = $all[0]
    $columns = $columns.Replace(" ","")
    $columns = $columns.Replace("|"," ] VARCHAR(100), [")

    $table = "CREATE TABLE " + $file + " ([" + $columns + "] VARCHAR(100))"

    $connection = New-Object System.Data.SqlClient.SqlConnection
    $buildTable = New-Object System.Data.SqlClient.SqlCommand
    $insertData = New-Object System.Data.SqlClient.SqlCommand

    $connection.ConnectionString = "Data Source=" + $server + ";Database=" + $database + ";integrated security=true"
    $buildTable.CommandText = $table
    $buildTable.Connection = $connection

    ## Added to function
    $x = 0
    $insertData.CommandText = "EXECUTE stp_CommaBulkInsert @1,@2"
    $insertData.Parameters.Add("@1", $full)
    $insertData.Parameters.Add("@2", $file)
    $insertData.Connection = $connection

    $connection.Open()
    $buildTable.ExecuteNonQuery()
    $connection.Close()

    ## Added to function
    $x = 1

    if ($x = 1)
    {
        $connection.Open()
        $insertData.ExecuteNonQuery()
        $connection.Close()
    }
}
AutoImportCommaFlatFiles -location "C:\Users\XXXX\Test3\" 
     -file "Illinois" -extension ".csv" -server "XXXXX" -database "TEST"

我的SQL代码

ALTER PROCEDURE stp_CommaBulkInsert
    @file VARCHAR(MAX), 
    @table VARCHAR(MAX)
AS
BEGIN
    DECLARE @f VARCHAR(MAX), @t VARCHAR(MAX), @s VARCHAR(MAX)

    SET @f = @file
    SET @t = @table

    SET @s = 'BULK INSERT ' + @t + '
              FROM ''' + @f + '''
              WITH (
                      FIELDTERMINATOR = ''|'',
                      ROWTERMINATOR = ''0x0A'',
                      FIRSTROW = 2
                   )'

    EXEC sp_executesql @s
END

我的错误

  

使用“ 0”参数调用“ ExecuteNonQuery”的异常:“第2行,第1列的批量加载数据转换错误(截断)   (ID)。
  第3行第1列(ID)的批量加载数据转换错误(截断)。
  第4行第2列(BusinessName)的批量加载数据转换错误(截断)。
  第5列第1列(ID)的批量加载数据转换错误(截断)。
  批量加载:在数据文件中遇到了意外的文件结尾。

     

链接服务器“(null)”的OLE DB提供程序“ BULK”报告了一个错误。提供程序未提供有关该错误的任何信息。
  无法从OLE DB提供程序“ BULK”获取链接服务器“(空)”的行。”
  在C:\ Users \ xxxxx \ Documents \ AutoUpload.ps1:29 char:9
  + $ insertData.ExecuteNonQuery()
  + ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  + CategoryInfo:未指定:(:) [],MethodInvocationException
  + FullyQualifiedErrorId:SqlException

我尝试更改定界符设置,尝试更改列数据类型设置,尝试从ID列中删除信息,尝试填充NULL并没有运气。

有什么想法吗?

0 个答案:

没有答案