如果我有一个新的数据/记录在我的CSV文件,然后我将它导入到我的SQL Server数据库使用PowerShell像这样。
$CSVImport = Import-CSV $Global:ErrorReport
ForEach ($CSVLine1 in $CSVImport) {
$CSVHold1 = $CSVLine1.Hold
$CSVGSID1 = $CSVLine1.GSID
$CSVSource1 = $CSVLine1.Source
$CSVTYPE1 = $CSVLine1.TYPE
$CSVMessage1 = $CSVLine1.Message
$CSVCreatedDate1 = $CSVLine1.Time
$query = "USE $Global:Database
IF NOT EXISTS (SELECT * FROM Lit_Hold_Err
WHERE GSID = '$CSVGSID1'
AND Source = '$($CSVSource1 -replace "'","''")')
BEGIN
INSERT INTO Lit_Hold_Err (Hold, GSID, Source, Error, Type,Date)
VALUES('$CSVHold1', '$CSVGSID1', '$($CSVSource1 -replace "'","''")','$CSVMessage1','$CSVTYPE1', '$CSVCreatedDate1')
END"
Invoke-Sqlcmd -Query $query -ServerInstance $Global:Server -Database $Global:Database
我只是想知道我应该如何写另一个查询,比较我的CSV文件与我的数据库和删除一个特定的/s记录从我的数据库,如果它不再存在于我的CSV文件?
我知道我需要使用DELETE语句,但我有点卡在WHERE子句上,所以任何帮助或建议都会非常感激。
建议使用DBATool的Import-DbaCsv读取CSV文件并将其批量加载到tempdb上的表中,然后使用合并指令进行插入/更新/删除。
导入命令类似于:
$Credential = Get-Credential
Import-DbaCsv -Path .test.csv -AutoCreateTable -SqlInstance my-instance -Database tempdb -SqlCredential $Credential -SupportsMultiline