如何使用 Powershell 处理 sql_Variant sql 数据类型

Posted

技术标签:

【中文标题】如何使用 Powershell 处理 sql_Variant sql 数据类型【英文标题】:How to Handle sql_Variant sql datatype using Powershell 【发布时间】:2019-07-11 16:25:42 【问题描述】:

我正在使用 power shell 执行存储过程之一,该存储过程具有数据类型为 sql_Variant 的参数之一并驻留在 SSISDB(系统存储过程)中

由于 sql_variant 支持多种数据类型,我正在传递 int、string 和 boolean 数据类型。

当我传递字符串数据类型时,存储过程执行良好。但不是 int 和 boolean。

过程名称是

Catalog.Set_Object_Parameter_Value

它有一个数据类型为 SQL_Variant 的参数。以下是屏幕截图。

根据某些条件输入值时,我会得到 int/string/bool 数据类型。

如何在使用 Power-shell 输入之前处理/将这些值转换为 Sql_Variant 数据类型。

目前我的 power-shell 命令如下所示。

$procSignature = "EXEC [catalog].[set_object_parameter_value] @object_type,@folder_name,@project_name,@parameter_name,@parameter_value,@object_name";
                            $cmd = New-Object System.Data.SqlClient.SqlCommand;
                            $cmd.Connection = $catalogConnection;
                            $cmd.CommandText = $procSignature;
                            $cmd.Parameters.AddWithValue("@object_type", $Scope ) | Out-Null;
                            $cmd.Parameters.AddWithValue("@folder_name", $FolderName ) | Out-Null;
                            $cmd.Parameters.AddWithValue("@project_name", $ProjectName ) | Out-Null;
                            $cmd.Parameters.AddWithValue("@parameter_name", $ParmeterName ) | Out-Null;
                            $cmd.Parameters.AddWithValue("@parameter_value", $ParmeterValue ) | Out-Null;
                            $cmd.Parameters.AddWithValue("@object_name", $object ) | Out-Null;

【问题讨论】:

那么究竟是什么错误?我想问题出在存储过程上,不是 powershell 脚本。 你不能用 [string]$ParameterValue 代替 $ParameterValue 吗? @marsze 因为它是系统存储过程,我不认为这是存储过程的问题。 @AdminOfThings - 我收到以下错误消息。使用“0”参数调用“ExecuteNonQuery”的异常:“输入值的数据类型与“布尔”的数据类型不兼容。”使用“0”参数调用“ExecuteNonQuery”的异常:“输入值的数据类型与“布尔”的数据类型不兼容。”使用“0”调用“ExecuteNonQuery”的异常 【参考方案1】:

我在完全相同的 SP 上遇到了完全相同的问题。试试这个:

$cmd.Parameters.AddWithValue("@parameter_value", $ParameterValue -As $ParameterValue.GetType().Name) | Out-Null;

【讨论】:

它无法处理布尔值。 确实如此。最后,我让提供此信息的 UI 也有一个参数类型的下拉菜单。在 PowerShell 中处理 SQL 变体并让事情猜对了,这太混乱/不可能了。

以上是关于如何使用 Powershell 处理 sql_Variant sql 数据类型的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Powershell 处理 sql_Variant sql 数据类型

如何使用批处理或 powershell 更改 Windows PC 的主机名

如何让 Powershell 运行批处理文件然后保持打开状态?

如何使用 PowerShell 处理数组以查找特定字符串?

如何在 PowerShell 中将文件作为流逐行处理

如何使程序仅在使用批处理或 powershell 有 Internet 连接时运行? [关闭]