我刚刚学习 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
我测试了以下两个脚本:
$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
插入返回相同数量的记录,但它们现在都是空白的,在测试这两个单独的之前情况并非如此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