簡體   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