繁体   English   中英

如何为SQL CLR存储过程提供sql_variant参数?

[英]How to have a sql_variant parameter for a SQL CLR stored procedure?

如何将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
}

在从SQL Books Online 映射CLR参数数据时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。

分区边界值,如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_VARIANTSQL_VARIANT )映射到.NET中的object

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM