首页 > 解决方案 > 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”报告了错误。提供商没有提供有关该错误的任何信息。
无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”中获取行。”
在 C:\Users\xxxxx\Documents\AutoUpload.ps1:29 char:9
+ $insertData.ExecuteNonQuery()
+ ~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException

我尝试更改分隔符设置,尝试更改列数据类型设置,尝试从 ID 列中删除信息,尝试使用 NULL 填充空格,但没有成功。

有任何想法吗?

标签: sqlsql-serverpowershell

解决方案


推荐阅读