私は PowerShell を学んでいます。.CSV
ファイルを SQL Server データベースにインポートしようとするスクリプトを作成しましたが、次のクエリがテーブルを追加しているだけであることがわかりました。
$database = 'DATABASE'
$server = 'SERVER'
$table = 'TABLE'
Import-CSV \\TESTPATH\licenses_v2.csv |
ForEach-Object {
Invoke-Sqlcmd -Database $database -ServerInstance $server -Query "insert into $table VALUES ('$($_.FirstName)','$($_.LastName)','$($_.Department)','$($_.Title)')"
}
そのため、最初のTRUNCATE
前INSERT
に、次の 2 つのスクリプトをテストしました。
$database = 'DATABASE'
$server = 'SERVER'
$table = 'TABLE'
Import-CSV \\TESTPATH\licenses_v2.csv |
ForEach-Object { Invoke-Sqlcmd -Database $database -ServerInstance $server -Query "truncate table $table; insert into $table VALUES ('$($_.FirstName)','$($_.LastName)','$($_.Department)','$($_.Title)')"
}
$database = 'DATABASE'
$server = 'SERVER'
$table = 'TABLE'
Invoke-Sqlcmd -Database $database -ServerInstance $server -Query "truncate table $table"
Import-CSV \\TESTPATH\licenses_v2.csv |
ForEach-Object { Invoke-Sqlcmd -Database $database -ServerInstance $server -Query "insert into $table VALUES ('$($_.FirstName)','$($_.LastName)','$($_.Department)','$($_.Title)')"
}
これらのスクリプトをテストした後、ページの上部にある元のスクリプトを使用すると、テーブルは.CSV
挿入から同じ数のレコードを返しますが、現在はすべて空白であり、これら 2 つを個別にテストする前はそうではありませんでしたTRUNCATE
スクリプト (ファイルの各レコードにはまだ同じ値があります):
PowerShell からオブジェクトをクエリすると、 select-object コマンドがすべての空のレコードを返すように見えます。
import-csv \\TestPath\licenses_v2.csv | select-object FirstName,Department,Title
ただし、Import-CSV は、ファイルに存在する値を返します。
Import-CSV \\TestPath\licenses_v2.csv
他の SQL ステートメントをテストしてリテラル SQL 文字列を挿入すると、 を使用してテーブルに書き込むことができるように見えますinvoke-sqlcmd
が、(間違っている可能性があります) powershell がファイルから読み取っているオブジェクト値を何とか切り捨てました。値はまだファイルにあります。
どうにかして PowerShell を復元する必要がありますか、それともファイル システムを何らかの形で変更したのでしょうか?
また、次のスクリプトを使用して SQL からまったく同じファイルを照会できるため、明らかに値を読み取ることができますが、PowerShell スクリプトは何らかの理由で import-csv コマンドを使用して値を読み取ることができません。
CREATE TABLE #TempTable(
[FirstName] [varchar](50) NULL,
[LastName] [varchar](50) NULL,
[Department] [varchar](150) NULL,
[Title] [varchar](150) NULL
)
BULK INSERT #TempTable
FROM '\\TestPath\licenses_v2.csv'
WITH
(
FIRSTROW = 2,
DATAFILETYPE='char',
FIELDTERMINATOR = '|',
ROWTERMINATOR = '\n',
TABLOCK,
KEEPNULLS -- Treat empty fields as NULLs.
)
go
select * from #TempTable