Apakah ada cara untuk mengeksekusi permintaan arbitrer pada SQL Server menggunakan Powershell di mesin lokal saya?
Apakah ada cara untuk mengeksekusi permintaan arbitrer pada SQL Server menggunakan Powershell di mesin lokal saya?
Bagi yang lain yang perlu melakukan ini hanya dengan stok .net dan PowerShell (tidak ada alat SQL tambahan yang diinstal) di sini adalah fungsi yang saya gunakan:
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
}
Saya telah menggunakan ini begitu lama saya tidak tahu siapa yang menulis bagian mana tetapi ini disaring dari contoh lain tetapi disederhanakan menjadi jelas dan hanya apa yang dibutuhkan tanpa ketergantungan atau fitur tambahan.
Saya menggunakan dan membagikan ini cukup sering sehingga saya telah mengubah ini menjadi modul skrip di GitHub sehingga Anda sekarang dapat pergi ke direktori modul Anda dan menjalankan git clone https://github.com/ChrisMagnuson/InvokeSQL
dan mulai saat itu invoke-sql akan secara otomatis dimuat ketika Anda menggunakannya (dengan asumsi Anda menggunakan PowerShell v3 atau yang lebih baru).
$connection.dispose()
dll. Saya tidak tahu apakah itu ada bedanyaAnda dapat menggunakan
Invoke-Sqlcmd
cmdlethttp://technet.microsoft.com/en-us/library/cc281720.aspx
sumber
Import-Module "sqlps" -DisableNameChecking
Inilah contoh yang saya temukan di blog ini .
Agaknya Anda bisa mengganti pernyataan TSQL yang berbeda di mana katanya
dbcc freeproccache
.sumber
ExecuteNonQuery()
kembali nol pada keberhasilan, kondisi yang saya gunakan adalah:if ($cmd.ExecuteNonQuery() -ne 0)
.Fungsi ini akan mengembalikan hasil kueri sebagai array objek PowerShell sehingga Anda dapat menggunakannya dalam filter dan mengakses kolom dengan mudah:
sumber
DataTable
(lihat jawaban Adam )?Jika Anda ingin melakukannya di mesin lokal Anda daripada dalam konteks SQL server maka saya akan menggunakan yang berikut ini. Itu yang kami gunakan di perusahaan saya.
Cukup isi $ ServerName , $ DatabaseName dan $ Query variabel dan Anda harus melakukannya dengan baik.
Saya tidak yakin bagaimana kami menemukan ini pada awalnya, tetapi ada sesuatu yang sangat mirip di sini .
sumber
sumber
Tidak ada cara "PowerShell" bawaan untuk menjalankan kueri SQL. Jika Anda memiliki alat SQL Server diinstal , Anda akan mendapatkan cmdlet Invoke-SqlCmd .
Karena PowerShell dibangun di atas .NET, Anda dapat menggunakan API ADO.NET untuk menjalankan kueri Anda.
sumber
Untuk menghindari SQL Injection dengan parameter varchar yang bisa Anda gunakan
sumber