Извлечение данных с помощью оператора SQL в Powershell - PullRequest
12 голосов
/ 18 ноября 2009

Моя цель - присвоить значение результатов, возвращаемых переменной:

$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

Ответы [ 2 ]

16 голосов
/ 18 ноября 2009
$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
15 голосов
/ 19 ноября 2009

Если вы используете 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...