2009-11-18 9 views
12

Mi objetivo es asignar el valor de los resultados devueltos a una variable:Recuperación de datos mediante sentencia SQL select en 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] 

El valor devuelto, obviamente, debe ser 'tempdb', así que ¿cómo puedo asignar este a una variable por lo que esto funcione:

Write-output "Database is " $variablename 

salida deseada: Base de datos tempdb es

Respuesta

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

Si está utilizando SQL Server 2008, debería considerar usar los cmdlets que están disponibles para PowerShell, como Invoke-SqlCmd, que se pueden usar para ejecutar consultas en una base de datos de SQL Server. Los he utilizado en un proyecto para automatizar el proceso de aplicar parches a una base de datos y registrar qué parches se han aplicado:

Primero tendrá que usar estos dos comandos para que los cmdlets de SQL Server estén disponibles para su sesión.

add-pssnapin sqlserverprovidersnapin100 
add-pssnapin sqlservercmdletsnapin100 

Una vez que estén disponibles, puede invocar comandos SQL de la siguiente manera.

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

La variable $x llevará a cabo los resultados de ejecutar la consulta.

Salida http://msdn.microsoft.com/en-us/library/cc281720.aspx para más detalles sobre cómo usar los cmdlets de SQL Server

+1

Sí, buena recomendación. –

Cuestiones relacionadas