如何从数据库中删除不再存在的记录



如果我有一个新的数据/记录在我的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

相关内容

  • 没有找到相关文章

最新更新