[英]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_VARIANT
( SQL_VARIANT
)映射到.NET中的object
。
如果需要檢查NULL,請將對象與DBNull.Value
進行比較。
如果您想知道對象中值的基礎類型(很可能不是SQL_VARIANT
/ object
),請使用GetType()
方法:
if (aVariant.GetType() == typeof(SqlInt16))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.