【问题标题】:How to have a sql_variant parameter for a SQL CLR stored procedure?如何为 SQL CLR 存储过程设置 sql_variant 参数?
【发布时间】:2010-12-07 22:04:18
【问题描述】:

如何将 sql_variant 参数添加到 SQL CLR 存储过程?使用 System.Object 不起作用,我看不到任何可以使用的属性。

[Microsoft.SqlServer.Server.SqlProcedure]
public static void ClearOnePartition(
    SqlString aString
    , /* I want this to be a sql_variant */ object aVariant
)
{
    //do stuff here
}

【问题讨论】:

  • 我不确定你可以。我所能找到的只是很多关于不同客户端 API 如何将它们翻译成例如的参考。 nvarchar 或二进制列。它必须是 sql_variant 吗?
  • @Damied_The_Unbeliever:是的,它确实需要是 sql_variant。我正在尝试传入任何给定分区的边界值,它作为 sql_variant 类型存在于 SQL 中。
  • 分区的边界值不是严格的 sql_variants(例如,它们不能接受文本类型的值)。我认为他们实际上在 SQL 中没有明确定义的类型。查看使用分区函数的 SMO 函数,它们被视为对象,所以我认为没有更好的 .NET 类型。

标签: c# sql sql-server stored-procedures sqlclr


【解决方案1】:

在 SQL 联机丛书中的 Mapping CLR Parameter Data 中,Object 被列为用于映射 sql_variant 的正确类型。

我创建了一个简单的 SQL Server 项目并向其中添加了以下类:

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void StoredProcedure1(object param1)
    {
        // Put your code here
        //Trace.Write(param1);
        SqlContext.Pipe.Send(param1.ToString());

    }
};

然后我修改了 test.sql 文件来运行这个存储过程:

DECLARE @thing sql_variant = 'hahahahaha';

EXEC dbo.StoredProcedure1 @thing

这会按预期运行并产生以下输出:

哈哈哈哈哈哈

没有行受到影响。

(返回 0 行)

已完成运行 sp_executesql。

【讨论】:

    【解决方案2】:

    分区边界值,如CREATE PARTITION FUNCTION 文档中所示,可以是多种不同类型之一:

    除 text、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)、别名数据类型或 CLR 用户定义数据外,所有数据类型都可有效用作分区列类型。

    它们的实际数据类型存储在sys.partition_parameters

    但如果从sys.partition_range_values 中选择它们,那么value 字段的类型为SQL_VARIANT(显然有充分的理由)。

    是的,SQL_VARIANT(如前所述)映射到 .NET 中的 object

    如果您需要检查 NULL,请将对象与 DBNull.Value 进行比较。

    如果您想知道对象中值的基础类型(很可能不会是 SQL_VARIANT / object ),请使用 GetType() 方法:

    if (aVariant.GetType() == typeof(SqlInt16))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 2018-04-29
      • 1970-01-01
      • 2010-10-25
      • 2011-06-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多