【发布时间】:2017-07-14 09:02:02
【问题描述】:
我有一个 sqlclr 表值函数,其原型类似于
CREATE FUNCTION [dbo].[some_func]
(...)
RETURNS TABLE (
[order_id] INT NULL,
[value1] VARCHAR(50) NULL,
[value2] INT NULL
)
AS EXTERNAL NAME [some_db].[MyProject].[some_func]
实际功能无关紧要。现在我知道我的函数总是根据order_id 按顺序返回结果。
我正在使用此函数并将其与索引为 order_id 的表连接起来,当我将两者连接并查看计划时,我发现连接已导致溢出以进行排序。
现在,我发现这篇文章告诉我可以使用修改原型并指定顺序。
http://www.sqlskills.com/blogs/bobb/sql-server-2008-ordered-sqlclr-table-valued-functions/
手动更改原型确实会产生所需的结果
CREATE FUNCTION [dbo].[some_func]
(...)
RETURNS TABLE (
[order_id] INT NULL,
[value1] VARCHAR(50) NULL,
[value2] INT NULL
)
ORDER(order_id asc)
AS EXTERNAL NAME [some_db].[MyProject].[some_func]
此版本的 func 不需要排序,也不会在 tempdb 中发生溢出。
但是,我们定期通过SSDT部署我们的sql项目,每次我们这样做都会自动生成原型。我无法控制设置的内容。我的 cs 函数中是否有一个选项,以便我可以指定 some_func 的结果是有序的?
【问题讨论】:
标签: sql-server sqlclr