Azure PowerShell Invoke-Sqlcmd: ошибка преобразования типа данных nvarchar в уникальный идентификатор - PullRequest
0 голосов
/ 03 июля 2019

У меня есть хранимая процедура SQL Server, которая принимает первые два параметра как uniqueidentifier, а третий как nvarchar. Когда я выполняю базу данных SQL Azure в SSMS, она работает нормально и без проблем, но когда я использую Azure PowerShell, я получаю следующее исключение

Invoke-Sqlcmd: Ошибка преобразования типа данных nvarchar в uniqueidentifier.

Скрипт PowerShell

 $parameter1 = New-Guid
 $parameter2 = New-Guid
 $parameter3 = "Test"

 $DatabaseName = "xxxx"
 $ServerName = "xxxx"

 $sqlQuery = "
            EXEC [dbo].[spxxxxxx]
            @parameter1 = [Guid]${parameter1},
            @parameter2 = [Guid]${parameter2},
            @parameter3 = '${parameter3}'
          "
 $params = @{
          'Database' = $DatabaseName
          'ServerInstance' = $ServerName
          'Username' = 'xxxx'
          'Password' = 'xxxx'
          'OutputSqlErrors' = $true
          'Query' =  $sqlQuery
    }

Invoke-Sqlcmd @params

Кто-нибудь может подсказать, как передать Guid parameters для хранимой процедуры в PowerShell, используя Invoke-Sqlcmd для решения этой проблемы?

1 Ответ

2 голосов
/ 03 июля 2019

Как всегда при построении запросов SQL, распечатайте их и изучите их.Вы генерируете что-то вроде:

    EXEC [dbo].[spxxxxxx]
    @parameter1 = [Guid]2e244a72-1e11-496d-8a7f-37844ae8ce6b,
    @parameter2 = [Guid]5fe0e88f-9bea-4a9f-b67e-fe55cdcadfbc,
    @parameter3 = 'Test'

, но пакет должен выглядеть как

    EXEC [dbo].[spxxxxxx]
    @parameter1 =  '2e244a72-1e11-496d-8a7f-37844ae8ce6b',
    @parameter2 =  '5fe0e88f-9bea-4a9f-b67e-fe55cdcadfbc',
    @parameter3 = 'Test'

при передаче строкового литерала, который будет неявно преобразован в UNQUEIDENTIFIER.

...