Подтвердить что ты не робот

Получение данных с помощью команды 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

4b9b3361

Ответ 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