2015-12-01 5 views
2

Это работает в SQL Server, но в любое время, когда я пытаюсь запустить его в моей среде powershell, это приводит к ошибке неправильного синтаксиса около d. Что я должен изменить, чтобы этот запуск выполнялся в PowerShell?Заявление о ситуации в запросе обновления

Function Run-Query 
{ 
    param([string[]]$queries) 

     $server='Server' 
     $dbname='Database' 
     $connStr='Server={0};Database={1};Integrated Security=SSPI;' -f $server,$dbname 
     For ($i = 0; $i -lt $queries.count; $i++) 
     { 
      $Command = New-Object System.Data.SqlClient.SqlCommand 
      $conn=New-Object System.Data.SqlClient.SQLConnection($connStr) 
      $conn.Open()    
      $Command.Connection = $conn 
      $Command.CommandText=$queries[$i] 
      $Command.ExecuteNonQuery() 
      $conn.Close() 
     } 
} 

$updatequery = "UPDATE d 
       SET [updatedate] = GETDate(), 
       [shipped] = 
         (
          CASE WHEN NOT EXISTS(Select 1 * 
               from [server].[db].[dbo].[viewname] vw 
               WHERE vw.customername = d.customername)      
           THEN 'Yes' 
          ELSE 
           'PreviousCustomer' 
          END 
         ) 
       FROM $fulllocation 
       WHERE ([shipped] IS NULL) 
       AND ([managerapproved] IS NOT NULL) 
       AND [readytoship] IN ('Go', 'Ready', 'Send')" 


Run-Query -queries $updatequery 
+0

Почему '' + =? Вы сначала определили пустой массив? Вы можете попытаться сделать строку дословно с помощью синтаксиса '@" моей строки "'. – arco444

+0

@ arco444 - нет, это была только опечатка с моей стороны. Удаление его по-прежнему вызывает ту же ошибку. –

+0

Надеюсь, он исправлен. один из способов, которыми я использую эту задачу, - после запуска запроса на SQL Server сохранить запрос qu в файле, затем получить запрос в переменную с помощью команды $ query = get-content PATH TO QUERY FILE -Delimiter "{FIM } " Я добавляю разделитель для этого, чтобы захватить содержимое до конца файла как одну строку, а не массив строки SQL Server 2012 и более поздние версии поставляются с модулем SQLPS, который включает команду Invoke-SqlCmd. Существует одна конкретная причина для создания этой функции? Если вы хотите использовать этот подход, скажите мне, что я пришлю вам. –

ответ

0

Определить запрос в виде строки буквального, как это:

$updatequery = @" 
        UPDATE d 
        SET [updatedate] = GETDate(), 
        [shipped] = 
          (
           CASE WHEN NOT EXISTS(Select 1 
                from [server].[db].[dbo].[viewname] vw 
                WHERE vw.customername = d.customername)      
            THEN 'Yes' 
           ELSE 
            'PreviousCustomer' 
           END 
          ) 
        FROM $fulllocation 
        WHERE ([shipped] IS NULL) 
        AND ([managerapproved] IS NOT NULL) 
        AND [readytoship] IN ('Go', 'Ready', 'Send') 
"@ 
+0

, конечно, мне пришлось добавить * из инструкции select, чтобы она работала правильно. Думал, я бы добавил, чтобы кто-то еще споткнулся об этом. –