【问题标题】:How to import a CSV, which is not a CSV file, file into SQL database using PowerShell如何使用 PowerShell 将不是 CSV 文件的 CSV 文件导入 SQL 数据库
【发布时间】:2023-02-01 00:54:41
【问题描述】:

我有一个看起来像这样的 txt 文件

Number    Name           #about 4 spaces between
89273428       John      #about 7 spaces between
59273423       Hannah      
95693424       David 

我正在尝试使用 PowerShell 上传到我的 SQL Server 数据库,但我不确定该怎么做,因此非常感谢任何建议或帮助。

我试图转换为 csv 文件,但所有内容都合并在 1 个单列中,所以我不能这样做。

        $CSVImport = Import-CSV $Global:TxtConvertCSV
        ForEach ($CSVLine in $CSVImport) {
            $CSVNumber = $CSVLine.Number.ToUpper()
            $CSVName = $CSVLine.Name.ToUpper()
            $Date = $CurDate

            $query = "INSERT INTO Table (Number, Name, Added_Date) VALUES('$CSVNumber', '$CSVName','$Date');"
            Invoke-Sqlcmd -Query $query 
        }

【问题讨论】:

  • 您的 txt 文件是否为每个“字段”使用固定宽度?如果是这样,您可以一次处理文件一行,将每一行转换为一条记录。
  • 您好,第一行“号码”和“姓名”之间大约有 4 个空格,但其余都是 7 个空格。

标签: sql sql-server powershell csv powershell-4.0


【解决方案1】:

为了成功使用 import-csv cmdlet,您的文件必须有一个可靠的分隔符。例如,如果您的文件实际上是制表符分隔的,那么您可以使用: 导入 csv 定界符“`t”

如果文件没有分隔符,但每个“字段”使用已知长度的固定位置,那么您可以执行以下操作:

请注意,这仅在文件使用固定布局时才有效。例如,假设我们有一个文件,每行包含一个数字和一个名称。在文件的每一行中,位置 0 到 7 都包含数字。即使不是所有数字的长度都是 8,这些位置仍然是为它们保留的。位置 15 到 23 包含名称。至于数字,即使每个名字都没有占满所有的位置,它们仍然保留给“名字”字段。 示例文件内容:

Number         Name
   12345       John
     333       Brittany
    2222       Jeff 
12345678       Johannes

由于数字字段末尾和名称字段开头之间有 7 个未使用的空格,我们将忽略这些空格。 您可以按如下方式处理此文件:

$fileContents = Get-Content Path_to_my_DataFile.txt
#use -skip 1 to ignore the first line, since that line just contains the column headings
$recordsFromFile = $fileContents | Select-Object -Skip 1 -Property @{name = 'number'; expression={$_.substring(0,8).trim()}},
    @{name='name';expression={$_.substring(15,8).trim()}}

完成后,您将拥有一个对象数组,其中每个项目都是一个 PSCustomObject,其中包含属性“number”和“name”。 您可以使用 out-gridview 确认字段看起来正确,如下所示:

$recordsFromFile | out-gridview

您也可以像这样将其转换为 CSV:

$recordsFromFile | convertto-csv -notypeinformation

【讨论】:

    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2021-09-22
    • 2010-10-04
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    相关资源
    最近更新 更多