Existe uma maneira de executar uma consulta arbitrária em um SQL Server usando o Powershell na minha máquina local?
Existe uma maneira de executar uma consulta arbitrária em um SQL Server usando o Powershell na minha máquina local?
Para outras pessoas que precisam fazer isso apenas com o estoque .net e PowerShell (nenhuma ferramenta SQL adicional instalada), aqui está a função que eu uso:
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
}
Eu tenho usado isso há tanto tempo que não sei quem escreveu quais partes, mas isso foi extraído dos exemplos de outras pessoas, mas simplificado para ficar claro e exatamente o que é necessário sem dependências ou recursos extras.
Eu uso e compartilho isso com frequência suficiente para transformá-lo em um módulo de script no GitHub, para que agora você possa ir para o diretório de módulos e executar git clone https://github.com/ChrisMagnuson/InvokeSQL
e, a partir desse momento, o invoke-sql seja carregado automaticamente quando você o usar (assumindo você está usando o powershell v3 ou posterior).
$connection.dispose()
etc. Eu não sei se isso faz alguma diferença, emboraVocê pode usar o
Invoke-Sqlcmd
cmdlethttp://technet.microsoft.com/en-us/library/cc281720.aspx
fonte
Import-Module "sqlps" -DisableNameChecking
Aqui está um exemplo que encontrei neste blog .
Presumivelmente, você pode substituir uma instrução TSQL diferente, onde ela diz
dbcc freeproccache
.fonte
ExecuteNonQuery()
voltou de zero em caso de sucesso, a condição de que eu uso é:if ($cmd.ExecuteNonQuery() -ne 0)
.Esta função retornará os resultados de uma consulta como uma matriz de objetos do PowerShell, para que você possa usá-los em filtros e acessar colunas facilmente:
fonte
DataTable
(veja a resposta de Adam )?Se você quiser fazê-lo em sua máquina local, e não no contexto do servidor SQL, eu usaria o seguinte. É o que usamos na minha empresa.
Basta preencher as variáveis $ ServerName , $ DatabaseName e $ Query e você deve estar pronto.
Não tenho certeza de como descobrimos isso originalmente, mas há algo muito semelhante aqui .
fonte
fonte
Não existe uma maneira interna de "PowerShell" de executar uma consulta SQL. Se você tiver as ferramentas do SQL Server instaladas , receberá um cmdlet Invoke-SqlCmd .
Como o PowerShell é criado no .NET, você pode usar a API ADO.NET para executar suas consultas.
fonte
Para evitar a injeção de SQL com parâmetros varchar, você pode usar
fonte