sql-server - 具有可为 null 的输出参数的 SQL Server 2016 CLR 存储过程

标签 sql-server stored-procedures parameters nullable sqlclr

我使用 C# 中的以下方法定义创建了一个 CLR 存储过程:

public static void MyProcedure (SqlString path, SqlString fileName, out SqlBoolean? myValue)

但是当我尝试在 SQL Server 2016 中创建它时:

create procedure [dbo].[MyProcedure] 
     @path nvarchar(max), 
     @fileName nvarchar(max), 
     @myValue bit output
with execute as caller 
as external name [MyAssembly].[StoredProcedures].[MyProcedure]

我收到以下错误:

CREATE PROCEDURE for "MyProcedure" failed because T-SQL and CLR types for parameter "@myValue" do not match.

是否有任何可能的方法来创建具有可为空的输出参数的 CLR 存储过程?如果是这样,怎么办?

最佳答案

去掉 C# 代码中参数类型的问号。 Sql*类型已经可以为空。

设置任何Sql*输入 NULL在 T-SQL 中,使用静态 Null字段(例如 SqlBoolean.Null )。

测试 Sql* 中的任何一个类型以查看它们是否为 null,请检查 bool 值 IsNull属性(例如 if (fileName.IsNull) )。

要了解有关使用 SQLCLR 的更多信息,请查看我在 SQL Server Central 上撰写的有关该主题的系列文章:Stairway to SQLCLR .

关于sql-server - 具有可为 null 的输出参数的 SQL Server 2016 CLR 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42521428/

相关文章:

c++ - 使用按名称调用传递参数

sql-server - 使用 SQL 选择 @ 参数

sql-server - 如何提高 where 子句或联接中列的非确定性函数的性能?

sql-server - 通过存储过程传递 "in"列表

c# - 将 IEnumerable<string> 作为用户定义的表类型参数传递给 SQL Server 存储过程

java - Spring - 使用存储过程时使用 simplejdbccall 进行批量更新

sql-server - 如何保留 SQL Server 存储过程修订历史记录

sql - 在相关子查询上使用 EXISTS 运算符的说明

sql-server - UCS-2和SQL Server

c - C中函数内部函数的参数和指针