Получение данных с помощью команды select SQL в 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]
Возвращаемое значение, очевидно, должно быть "tempdb", поэтому как я могу назначить это переменной, чтобы это работало:
Write-output "Database is " $variablename
Требуемый вывод: База данных - tempdb
Ответы
Ответ 1
$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
Ответ 2
Если вы используете SQL Server 2008, вам следует рассмотреть возможность использования командлетов, доступных для PowerShell, таких как Invoke-SqlCmd
, которые могут использоваться для выполнения запросов к базе данных SQL Server. Я использовал их в проекте для автоматизации процесса применения исправлений к базе данных и записи того, какие исправления были применены:
Сначала вам нужно будет использовать эти две команды, чтобы сделать командлеты SQL Server доступными для вашего сеанса.
add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100
Как только они будут доступны, вы можете вызвать команды SQL следующим образом.
$x = invoke-sqlcmd -query "select name from sysdatabases where name = 'tempdb'"
Переменная $x
будет содержать результаты выполнения запроса.
Обратитесь http://msdn.microsoft.com/en-us/library/cc281720.aspx для получения более подробной информации об использовании командлетов SQL Server