CLR 存储过程,接受 nvarchar(max) 的对象参数

发布于 2024-10-20 10:02:02 字数 551 浏览 1 评论 0原文

我有一个 CLR 存储过程,它采用任意列中的值作为参数。要处理所有可能的列,参数 if 类型为 object / sql_variant

[SqlFunction]  
public static bool IsTrue(object storedValue...

当从 nvarchar(max) 类型的列传入数据时,我得到:

“操作数类型冲突:nvarchar(max) 是 与 sql_variant 不兼容”。

如果参数是一个字符串,我可以将其声明为 SqlChar 或用 [SqlFacet(MaxSize=-1)] 修饰它以使其接受长度> 4000的列。对于对象是如何完成的?

I have a CLR stored procedure that takes a value from an arbitrary column as parameter. To handle all possible columns the parameter if of type object / sql_variant:

[SqlFunction]  
public static bool IsTrue(object storedValue...

When passing in data from a column of type nvarchar(max) I get:

"Operand type clash: nvarchar(max) is
incompatible with sql_variant".

If the parameter had been a string I could have declared it as SqlChar or decorated it with [SqlFacet(MaxSize=-1)] to make it accept columns with length > 4000. How is it done for objects?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凯凯我们等你回来 2024-10-27 10:02:02

我不相信你能实现你正在尝试的目标。 sql_variant 的上限为 8k 字节。 nvarchar(max) 上限位于 2^31-1 bytes SQL Server 检测到您可能正在尝试将德克萨斯州塞进迪克西杯。由于 8k sql_variant 限制,不存在可以说服 SQL Server 让您这样做的装饰器。

I don't believe you can achieve what you are attempting. The upper boundary on sql_variant is 8k bytes. nvarchar(max) is capped at 2^31-1 bytes SQL Server is detecting you are, potentially, attempting to stuff the state of Texas into a Dixie cup. Due to the 8k sql_variant limit, no decorator exists that will convince SQL Server to let you do that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文