SQL-запрос Powershell к переменным - PullRequest
0 голосов
/ 10 декабря 2018

Попытка использовать результаты SQL в качестве переменных.Это вернет результаты на хост, но я хотел бы использовать каждое значение в качестве переменной.

$job = "22940"
$SQLServer = "my-sql" #use Server\Instance for named SQL instances! 
$SQLDBName = "MyDatabase"
$SqlQuery = "DECLARE @Job VARCHAR(5);
SET @Job = '$job'
SELECT        dbo.Job.Job, dbo.Job.Customer, 
              dbo.Job.Note_Text, 
              dbo.User_Values.Date1 AS 'Setup Date', 
              dbo.User_Values.Date2 AS 'Due Date'
FROM            dbo.Job INNER JOIN
                         dbo.User_Values ON dbo.Job.User_Values = dbo.User_Values.User_Values
WHERE        (dbo.Job.Job = @Job) AND (dbo.Job.User_Values = dbo.User_Values.User_Values)"

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True"

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)

$SqlConnection.Close()

clear

$DataSet.Tables[0]

Как поместить каждый столбец в переменную, которую я могу использовать для чего-то другого?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Я работаю с таблицами данных напрямую.Вам также следует внимательно изучить параметры обработки.Это помогает с обработкой специальных символов в значении переменной.И он защищает от атак SQL-инъекций:

$Sql = 'select top 100 first_name, Last_name from person where last_name=@lastname'
$Database = 'XXX'
$Server = 'XXX'

$LastName = 'Jones'

$Connection = New-Object System.Data.SqlClient.SqlConnection
$Connection.ConnectionString = "Server=$Server;Database=$Database;Integrated Security=True"
$Connection.Open()

$cmd = new-object system.Data.SqlClient.SqlCommand($Sql, $Connection)

$null = $cmd.Parameters.AddWithValue('@lastname', $LastName)

$DataTable = New-Object System.Data.DataTable
$SqlDataReader = $cmd.ExecuteReader()
$DataTable.Load($SqlDataReader)

$Connection.Close()
$Connection = $null

$DataTable.Rows.Count

foreach ($r in $DataTable.Rows)
{
    $fn = $r.first_name
    $ln = $r.last_name    

    "$fn $ln"
}
0 голосов
/ 10 декабря 2018

Не уверен, что это действительно правильный путь, но он дает мне результаты, которые я ищу.Просматривал некоторые мои заметки о работе с CSV-файлами, и в конце я добавил foreach.Приведенные выше комментарии @notjustme и @jcoehoorn заставили меня взглянуть в правильном направлении.Спасибо

$job = "22940"
$SQLServer = "my-sql" #use Server\Instance for named SQL instances! 
$SQLDBName = "MyDatabase"
$SqlQuery = "DECLARE @Job VARCHAR(5);
SET @Job = '$job'
SELECT        dbo.Job.Job, dbo.Job.Customer, 
              dbo.Job.Note_Text, 
              dbo.User_Values.Date1 AS 'Setup Date', 
              dbo.User_Values.Date2 AS 'Due Date'
FROM            dbo.Job INNER JOIN
                         dbo.User_Values ON dbo.Job.User_Values = dbo.User_Values.User_Values
WHERE        (dbo.Job.Job = @Job) AND (dbo.Job.User_Values = dbo.User_Values.User_Values)"

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True"

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)

$SqlConnection.Close()

clear

foreach($Job in $DataSet.Tables[0])
     {
     $MyJobNumber = $Job.Job
     $MyCustomer = $Job.Customer
     $MyNotes = $Job.Note_Text
     $MySetupDate = $Job.Setup_Date
     $MyDueDate = $Job.Due_Date
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...