Comment importer des données à partir .csv dans SQL Server à l'aide de PowerShell?
J'ai le scénario suivant:
Iam à l'aide de PowerShell et ont pour importer des données à partir d'un .fichier csv dans un déjà créé une table sur un Serveur SQL server Base de données. Donc je n'ai pas besoin de la ligne d'en-tête de la csv, il suffit d'écrire les données.
Voici ce que j'ai fait jusqu'à présent:
#Setup for SQL Server connection
#SQL Server Name
$SQLServer = "APPLIK02\SQLEXPRESS"
#Database Name
$SQLDBName = "code-test"
#Create the SQL Connection Object
$SQLConn = New-Object System.Data.SQLClient.SQLConnection
#Create the SQL Command Object, to work with the Database
$SQLCmd = New-Object System.Data.SQLClient.SQLCommand
#Set the connection string one the SQL Connection Object
$SQLConn.ConnectionString = "Server=$SQLServer;Database=$SQLDBName; Integrated Security=SSPI"
#Open the connection
$SQLConn.Open()
#Handle the query with SQLCommand Object
$SQLCmd.CommandText = $query
#Provide the open connection to the Command Object as a property
$SQLCmd.Connection = $SQLConn
#Execute
$SQLReturn=$SQLCmd.ExecuteReader()
Import-module sqlps
$tablename = "dbo."+$name
Import-CSV .$csvFile | ForEach-Object Invoke-Sqlcmd
-Database $SQLDBName -ServerInstance $SQLServer
#-Query "insert into $tablename VALUES ('$_.Column1','$_.Column2')"
#Close
$SQLReturn.Close()
$SQLConn.Close()
- Eh bien, pour que vous avez commenté votre instruction de la Requête, ce qui va poser un problème. Et vous avez supprimé les crochets sur le ForEach-Object. Vous avez aussi ajouté BEAUCOUP d'aléatoire code et le copier/coller de partout dans le web, et aucune de ces lignes pourraient être à l'origine de ces problèmes. Je pense que cette approche que vous prenez est ce qui en fait beaucoup plus difficile qu'il doit être. S'il vous plaît essayez seulement l'approche que j'ai déjà donné, et laissez-moi savoir quelles erreurs vous avez.
- Bonjour FoxDeploy, je l'ai fait hier, le code ci-dessus a été justing expérimenter la façon dont votre code de travail. Merci
Vous devez vous connecter pour publier un commentaire.
J'ai écrit un billet de blog sur l'utilisation de SQL avec PowerShell, vous pouvez lire plus à ce sujet ici.
Nous pouvons le faire facilement si vous avez le SQL-PS module disponible. Simplement fournir des valeurs pour votre nom de base de données, le nom du serveur et de la table, puis exécutez la commande suivante:
Pour être clair, remplacer Column1, Column2 avec les noms des colonnes dans un fichier CSV.
Assurez-vous que votre fichier CSV a les valeurs dans le même format que votre SQL DB cependant, ou vous pouvez rencontrer des erreurs.
Lorsque cela est exécuté, vous ne verrez pas de sortie de la console. Je recommanderais l'interrogation par la suite pour être certain que vos valeurs sont acceptées.
Import-module sqlps
à votre script. Si vous êtes en cours d'exécution de PowerShell v3.0 et versions ultérieures, vous n'avez pas besoin d'import-module, mais sur les versions antérieures, vous n'avez qu'à importer en premier.$_.colname
dans une sous-expression ($($_.colname)
). Merci de résoudre ce problème. Aussi, méfiez-vous que le fait de mettre des variables dans les requêtes SQL comme ce qui vous rend vulnérable aux injection SQL. Vous pouvez envisager d'utiliser un déclaration à la place.