Czy istnieje sposób wykonania dowolnego zapytania na serwerze SQL przy użyciu programu PowerShell na moim komputerze lokalnym?
161
Czy istnieje sposób wykonania dowolnego zapytania na serwerze SQL przy użyciu programu PowerShell na moim komputerze lokalnym?
Dla innych, którzy muszą to zrobić za pomocą zwykłego .net i PowerShell (bez zainstalowanych dodatkowych narzędzi SQL), oto funkcja, której używam:
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
}
Używam tego od tak dawna, że nie wiem, kto napisał, które części, ale zostało to wydestylowane z przykładów innych, ale uproszczone, aby było jasne i tylko to, co jest potrzebne, bez dodatkowych zależności lub funkcji.
Używam i udostępniam to na tyle często, że zamieniłem to w moduł skryptu na GitHub , abyś mógł teraz przejść do katalogu modułów i wykonać, git clone https://github.com/ChrisMagnuson/InvokeSQL
a od tego momentu invoke-sql zostanie automatycznie załadowany, gdy zaczniesz go używać (zakładając korzystasz z PowerShell w wersji 3 lub nowszej).
$connection.dispose()
itp. Nie wiem, czy to robi jakąkolwiek różnicęMożesz użyć polecenia
Invoke-Sqlcmd
cmdlethttp://technet.microsoft.com/en-us/library/cc281720.aspx
źródło
Import-Module "sqlps" -DisableNameChecking
Oto przykład, który znalazłem na tym blogu .
Przypuszczalnie można by zastąpić inną instrukcję TSQL tam, gdzie jest napisana
dbcc freeproccache
.źródło
ExecuteNonQuery()
wrócił do zera w przypadku sukcesu, warunek, że używam to:if ($cmd.ExecuteNonQuery() -ne 0)
.Ta funkcja zwróci wyniki zapytania jako tablicę obiektów PowerShell, dzięki czemu można ich używać w filtrach i łatwo uzyskiwać dostęp do kolumn:
źródło
DataTable
(patrz odpowiedź Adama )?Jeśli chcesz to zrobić na komputerze lokalnym, a nie w kontekście serwera SQL, użyłbym następującego. To jest to, czego używamy w mojej firmie.
Wystarczy wypełnić zmienne $ ServerName , $ DatabaseName i $ Query i wszystko powinno być gotowe.
Nie jestem pewien, jak pierwotnie znaleźć na to uwagę, ale jest coś bardzo podobnego tutaj .
źródło
źródło
Nie ma wbudowanego „PowerShell” sposobu uruchamiania zapytania SQL. Jeśli masz zainstalowane narzędzia SQL Server , otrzymasz polecenie cmdlet Invoke-SqlCmd .
Ponieważ program PowerShell jest oparty na platformie .NET, do uruchamiania zapytań można używać interfejsu API ADO.NET .
źródło
Aby uniknąć iniekcji SQL z parametrami varchar, możesz użyć
źródło