Есть ли способ выполнить произвольный запрос на SQL Server, используя Powershell на моем локальном компьютере?
161
Есть ли способ выполнить произвольный запрос на SQL Server, используя Powershell на моем локальном компьютере?
Для других, которым нужно сделать это с помощью только стандартных .net и PowerShell (без дополнительных инструментов SQL), вот функция, которую я использую:
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
}
Я использовал это так долго, что я не знаю, кто написал, какие части, но это было извлечено из других примеров, но упрощено, чтобы быть ясным и просто то, что нужно без дополнительных зависимостей или функций.
Я использую и делюсь этим достаточно часто, чтобы превратить это в модуль сценариев на GitHub, чтобы вы теперь могли перейти в каталог модулей и выполнить его, git clone https://github.com/ChrisMagnuson/InvokeSQL
и с этого момента invoke-sql будет автоматически загружаться при его использовании (при условии, что вы используете powershell v3 или новее).
$connection.dispose()
и т. Д. Я не знаю, имеет ли это какое-то значениеВы можете использовать
Invoke-Sqlcmd
командлетhttp://technet.microsoft.com/en-us/library/cc281720.aspx
источник
Import-Module "sqlps" -DisableNameChecking
Вот пример, который я нашел в этом блоге .
Предположительно, вы можете заменить другой оператор TSQL там, где он написан
dbcc freeproccache
.источник
ExecuteNonQuery()
вернулся к нулю в случае успеха, условие , что использование I является:if ($cmd.ExecuteNonQuery() -ne 0)
.Эта функция возвращает результаты запроса в виде массива объектов PowerShell, так что вы можете использовать их в фильтрах и легко получать доступ к столбцам:
источник
DataTable
(см . Ответ Адама )?Если вы хотите сделать это на локальном компьютере, а не в контексте SQL-сервера, я бы использовал следующее. Это то, что мы используем в моей компании.
Просто заполните переменные $ ServerName , $ DatabaseName и $ Query, и все будет хорошо.
Я не знаю , как мы первоначально обнаружили это, но есть что - то очень похоже здесь .
источник
источник
Не существует встроенного способа «PowerShell» для выполнения SQL-запроса. Если у вас установлены инструменты SQL Server , вы получите командлет Invoke-SqlCmd .
Поскольку PowerShell построен на .NET, вы можете использовать API ADO.NET для выполнения ваших запросов.
источник
Чтобы избежать SQL-инъекций с параметрами varchar, вы можете использовать
источник