首页 > 解决方案 > Azure PowerShell Invoke-Sqlcmd:将数据类型 nvarchar 转换为 uniqueidentifier 时出错

问题描述

我有一个 SQL Server 存储过程,它接受前两个参数 asuniqueidentifier和第三个 as nvarchar。当我在 SSMS 中对 Azure SQL 数据库执行时,它工作正常并且没有问题,但是当我使用 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 parametersPowerShell 中的存储过程Invoke-Sqlcmd来解决此问题?

标签: sql-serverpowershellazure-sql-databaseazure-powershell

解决方案


与构建 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 的字符串文字时。


推荐阅读