Powershell - CSV Import in SQL
Guten Abend,
ich habe für den Upload einer CSV in SQL folgendes Skript:
Leider bekomme ich hier ab diesen Block:
Eine Fehlermeldung angezeigt:
Wie bekomme ich das am besten behoben?
Ich freue mich auf eine Rückmeldung.
ich habe für den Upload einer CSV in SQL folgendes Skript:
$CSVFileName = "C:\Users\User-01\Desktop\ImportingCSVsIntoSQLv1\ExampleData.csv"
$SQLInstance = "localhost\SQLEXPRESS"
$SQLDatabase = "CSVDemoDB01"
$SQLTable = "CSVData"
$SQLTempDatabase = "tempdb"
$SQLTempTable = "CSVDataImport"
$SQLCredentials = Get-Credential -Message "Enter your SQL username & password"
$SQLUsername = $SQLCredentials.UserName
$SQLPassword = $SQLCredentials.GetNetworkCredential().Password
$Start = Get-Date
$SQLModuleCheck = Get-Module -ListAvailable SqlServer
if ($SQLModuleCheck -eq $null)
{
write-host "SqlServer Module Not Found - Installing"
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
Install-Module -Name SqlServer –Scope CurrentUser -Confirm:$false -AllowClobber
}
Import-Module SqlServer
$SQLCreateTempTable = "USE $SQLTempDatabase
CREATE TABLE $SQLTempTable (
RowID int IDENTITY(1,1) PRIMARY KEY,
RecordID varchar(50),
DataField1 varchar(255),
DataField2 varchar(255)
);"
Invoke-SQLCmd -Query $SQLCreateTempTable -ServerInstance $SQLInstance -Username $SQLUsername -Password $SQLPassword
$CSVImport = Import-CSV $CSVFileName
$CSVRowCount = $CSVImport.Count
"Inserting $CSVRowCount rows from CSV into SQL Table $SQLTempTable"
ForEach ($CSVLine in $CSVImport)
{
$CSVRecordID = $CSVLine.RecordID
$CSVDataField1 = $CSVLine.DataField1
$CSVDataField2 = $CSVLine.DataField2
$SQLInsert = "USE $SQLTempDatabase
INSERT INTO $SQLTempTable (RecordID, DataField1, DataField2)
VALUES('$CSVRecordID', '$CSVDataField1', '$CSVDataField2');"
Invoke-SQLCmd -Query $SQLInsert -ServerInstance $SQLInstance -Username $SQLUsername -Password $SQLPassword
}
$SQLMerge = "MERGE $SQLDatabase.dbo.$SQLTable Target
USING $SQLTempDatabase.dbo.$SQLTempTable Source
ON (Target.RecordID = Source.RecordID)
WHEN MATCHED
THEN UPDATE
SET Target.DataField1 = Source.DataField1,
Target.DataField2 = Source.DataField2
WHEN NOT MATCHED BY TARGET
THEN INSERT (RecordID, DataField1, DataField2)
VALUES (Source.RecordID, Source.DataField1, Source.DataField2);"
Invoke-SQLCmd -Query $SQLMerge -ServerInstance $SQLInstance -Username $SQLUsername -Password $SQLPassword
$SQLDrop = "USE $SQLTempDatabase
DROP TABLE $SQLTempTable;"
Invoke-SQLCmd -Query $SQLDrop -ServerInstance $SQLInstance -Username $SQLUsername -Password $SQLPassword
$End = Get-Date
$TimeTaken = New-Timespan -Start $Start -End $End | Select -ExpandProperty TotalSeconds
$TimeTaken = [Math]::Round($TimeTaken, 0)
"CSV Import Finished In $TimeTaken Seconds"
Leider bekomme ich hier ab diesen Block:
$SQLMerge = "MERGE $SQLDatabase.dbo.$SQLTable Target
USING $SQLTempDatabase.dbo.$SQLTempTable Source
ON (Target.RecordID = Source.RecordID)
WHEN MATCHED
THEN UPDATE
SET Target.DataField1 = Source.DataField1,
Target.DataField2 = Source.DataField2
WHEN NOT MATCHED BY TARGET
THEN INSERT (RecordID, DataField1, DataField2)
VALUES (Source.RecordID, Source.DataField1, Source.DataField2);"
Invoke-SQLCmd -Query $SQLMerge -ServerInstance $SQLInstance -Username $SQLUsername -Password $SQLPassword
Eine Fehlermeldung angezeigt:
Invoke-SQLCmd : Ungültiger Objektname "tempdb.dbo.CSVDataImport".
Meldung: 208, Ebene: 16, Zustand: 1, Prozedur: , Zeile: 1.
In C:\Users\User-01\Desktop\ImportingCSVsIntoSQLv1\ImportingCSVsIntoSQLv1-Import.ps1:63 Zeichen:1
+ Invoke-SQLCmd -Query $SQLMerge -ServerInstance $SQLInstance -Username ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException
+ FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
Wie bekomme ich das am besten behoben?
Ich freue mich auf eine Rückmeldung.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 619409
Url: https://administrator.de/forum/powershell-csv-import-in-sql-619409.html
Ausgedruckt am: 12.04.2025 um 12:04 Uhr
1 Kommentar