C# 如何为sql CLR存储过程设置sql_变量参数?
如何将sql_变量参数添加到sql CLR存储过程中?使用System.Object不起作用,我看不到任何可以使用的属性C# 如何为sql CLR存储过程设置sql_变量参数?,c#,sql,sql-server,stored-procedures,sqlclr,C#,Sql,Sql Server,Stored Procedures,Sqlclr,如何将sql_变量参数添加到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 }
[Microsoft.SqlServer.Server.SqlProcedure]
public static void ClearOnePartition(
SqlString aString
, /* I want this to be a sql_variant */ object aVariant
)
{
//do stuff here
}
在“来自SQL联机丛书”中,列为要用于映射的正确类型
我创建了一个简单的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
如文档所示,分区边界值可以是许多不同类型中的一种: 除text、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)、alias数据类型或CLR用户定义的数据类型外,所有数据类型都可以用作分区列 它们的实际数据类型存储在中 但如果从中选择它们,则
值
字段的类型为SQL\u VARIANT
(显然是有充分理由的)
是的,SQL\u VARIANT
(如前所述)映射到.NET中的对象
如果需要检查空值,请将对象与DBNull.Value
进行比较
如果您想知道对象中值的基本类型(很可能不是SQL\u VARIANT
/object
),请使用GetType()
方法:
if(aVariant.GetType()==typeof(SqlInt16))
我不确定你能不能。我所能找到的只是很多关于不同客户端API如何将它们转换为nvarchar或二进制列的参考资料。它必须是sql变体吗?@Damid_The_异教徒:是的,它确实需要是sql变体。我试图为任何给定分区传入边界值,该值在SQL中作为SQL_变量类型存在。分区的边界值严格来说不是SQL_变量(例如,它们不能接受文本类型的值)。我认为它们实际上在SQL中没有定义良好的类型。查看SMO函数中的分区函数,它们被视为对象,因此我认为没有更好的.NET类型适合它们。