我使用 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/