簡體   English   中英

在沒有 Sqlcmd 的情況下將 CSV 列導入 SQL 表

[英]Importing CSV columns into SQL table without Sqlcmd

我目前正在導入一個 csv 文件並將一些結果插入到一個表中。

不幸的是,我使用的是 Sqlcmd,但該模塊未安裝在相關服務器上,無法安裝(我無法控制)。

有沒有辦法在 SqlCMD 之外管理與下面完全相同的方法?

示例代碼:


$server = 's'
$database = 'd'
$table = 't'

Import-CSV C:\Test\Test.csv | ForEach-Object {Invoke-Sqlcmd `
  -Database $database -ServerInstance $server `
  -Query "INSERT INTO $table VALUES ('$($_."Column One")',
                                     '$($_."Column Two")',
                                      NULL,
                                     '$($_.""Column Three"")')"
    }


您可以嘗試 ADO.Net 對象:

# Hardcode the table name, unless you *REALLY* trust your users.
$SQL = "INSERT INTO TableName VALUES (@Column1, @Column2, NULL, @Column3)"

$conn = new-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Server=$server;Database=$database;Integrated Security=True;"
$cmd = new-Object System.Data.SqlClient.SqlCommand($SQL, $conn)

# Use actual types and lengths from the database here
$c1 = $cmd.Parameters.Add("@Column1", [System.Data.SqlDbType]::NVarChar, 20)
$c2 = $cmd.Parameters.Add("@Column2", [System.Data.SqlDbType]::NVarChar, 20)
$c3 = $cmd.Parameters.Add("@Column3", [System.Data.SqlDbType]::NVarChar, 20)

$conn.Open()

Import-CSV C:\Test\Test.csv | ForEach-Object {
   $c1.Value = $_."Column One"
   $c2.Value = $_."Column Two"       
   $c3.Value = $_."Column Three"

   $cmd.ExecuteNonQuery()
}
$conn.Close()

這也將解決數據中撇號的任何問題,這會在原始數據中造成巨大的問題。

您可以嘗試使用批量插入命令,搜索簡單的 SQL 連接並執行查詢 - 如果您擁有批量權限並且服務器有權訪問文件本身,那么正是 Joel Coehoorn 發布的那個。 您也可以向它添加參數,然后以您認為合適的方式調用它。 這意味着您可以 foreach 文件夾中的文件,使用您的連接調用批量插入。

BULK INSERT TableName
FROM 'LinkToSourceFile.csv' WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n',
FIRSTROW = 2
    );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM