2009-11-18 27 views
12

Mục tiêu của tôi là để gán giá trị của các kết quả trả cho một biến:Lấy dữ liệu sử dụng lựa chọn câu lệnh SQL trong Powershell

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server=HOME\SQLEXPRESS;Database=master;Integrated Security=True" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = "select name from sysdatabases where name = 'tempdb'" 
$SqlCmd.Connection = $SqlConnection 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet 
$SqlAdapter.Fill($DataSet) 
$SqlConnection.Close() 
$DataSet.Tables[0] 

Giá trị trả lại rõ ràng nên 'tempdb', vì vậy làm thế nào tôi có thể gán này để một biến vì vậy đây sẽ làm việc:

Write-output "Database is " $variablename 

đầu ra mong muốn: Cơ sở dữ liệu là tempdb

Trả lời

14
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server=HOME\SQLEXPRESS;Database=master;Integrated Security=True" 
$SqlConnection.Open() 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = "select name from sysdatabases where name = 'tempdb'" 
$SqlCmd.Connection = $SqlConnection 
$dbname = $SqlCmd.ExecuteScalar() 
$SqlConnection.Close() 
Write-output "Database is " $dbname 
14

Nếu bạn đang sử dụng SQL Server 2008, bạn nên xem xét việc sử dụng các lệnh ghép ngắn có sẵn cho PowerShell chẳng hạn như Invoke-SqlCmd có thể được sử dụng để thực hiện các truy vấn đối với cơ sở dữ liệu SQL Server. Tôi đã sử dụng chúng trên một dự án để tự động hóa quá trình áp dụng các bản vá lỗi cho cơ sở dữ liệu và ghi lại các bản vá lỗi đã được áp dụng:

Trước tiên bạn sẽ cần sử dụng hai lệnh này để làm cho các lệnh ghép ngắn SQL Server có sẵn cho phiên của bạn.

add-pssnapin sqlserverprovidersnapin100 
add-pssnapin sqlservercmdletsnapin100 

Khi chúng khả dụng, bạn có thể gọi các lệnh SQL như sau.

$x = invoke-sqlcmd -query "select name from sysdatabases where name = 'tempdb'" 

Biến số $x sẽ giữ kết quả chạy truy vấn.

Kiểm tra http://msdn.microsoft.com/en-us/library/cc281720.aspx để biết thêm chi tiết về cách sử dụng các lệnh ghép ngắn SQL Server

+1

Có, đề xuất tốt. –

Các vấn đề liên quan