Existe-t-il un moyen d'exécuter une requête arbitraire sur un serveur SQL à l'aide de Powershell sur ma machine locale?
Existe-t-il un moyen d'exécuter une requête arbitraire sur un serveur SQL à l'aide de Powershell sur ma machine locale?
Pour les autres qui ont besoin de le faire avec juste du stock .net et PowerShell (aucun outil SQL supplémentaire installé), voici la fonction que j'utilise:
function Invoke-SQL {
param(
[string] $dataSource = ".\SQLEXPRESS",
[string] $database = "MasterData",
[string] $sqlCommand = $(throw "Please specify a query.")
)
$connectionString = "Data Source=$dataSource; " +
"Integrated Security=SSPI; " +
"Initial Catalog=$database"
$connection = new-object system.data.SqlClient.SQLConnection($connectionString)
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
$connection.Open()
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet) | Out-Null
$connection.Close()
$dataSet.Tables
}
J'utilise ceci depuis si longtemps que je ne sais pas qui a écrit quelles parties, mais cela a été distillé à partir d'exemples d'autres mais simplifié pour être clair et juste ce qui est nécessaire sans dépendances ou fonctionnalités supplémentaires.
J'utilise et partage cela assez souvent pour que je l'ai transformé en un module de script sur GitHub afin que vous puissiez maintenant aller dans votre répertoire de modules et l'exécuter git clone https://github.com/ChrisMagnuson/InvokeSQL
et à partir de ce moment, invoke-sql sera automatiquement chargé lorsque vous l'utiliserez (en supposant votre utilisation de PowerShell v3 ou version ultérieure).
$connection.dispose()
etc. Je ne sais pas si cela fait une différenceVous pouvez utiliser l'
Invoke-Sqlcmd
applet de commandehttp://technet.microsoft.com/en-us/library/cc281720.aspx
la source
Import-Module "sqlps" -DisableNameChecking
Voici un exemple que j'ai trouvé sur ce blog .
Vraisemblablement, vous pouvez remplacer une instruction TSQL différente là où elle est indiquée
dbcc freeproccache
.la source
ExecuteNonQuery()
revenu à zéro en cas de succès, à condition que je utiliser est:if ($cmd.ExecuteNonQuery() -ne 0)
.Cette fonction retournera les résultats d'une requête sous forme de tableau d'objets PowerShell afin que vous puissiez les utiliser dans des filtres et accéder facilement aux colonnes:
la source
DataTable
(voir la réponse d'Adam )?Si vous voulez le faire sur votre machine locale au lieu de dans le contexte du serveur SQL, j'utiliserais ce qui suit. C'est ce que nous utilisons dans mon entreprise.
Remplissez simplement $ ServerName , $ DatabaseName et $ Query variables et vous devriez être prêt à partir.
Je ne sais pas comment nous l'avons découvert à l'origine, mais il y a quelque chose de très similaire ici .
la source
la source
Il n'existe pas de méthode "PowerShell" intégrée pour exécuter une requête SQL. Si vous avez installé les outils SQL Server , vous obtiendrez un Invoke-SqlCmd cmdlet .
Étant donné que PowerShell est basé sur .NET, vous pouvez utiliser l' API ADO.NET pour exécuter vos requêtes.
la source
Pour éviter l'injection SQL avec des paramètres varchar, vous pouvez utiliser
la source