我有一个具有自定义排序的存储过程(在order by
之后)。换句话说,在order by
之后,我对某些字段进行了一些子字符串和长度计算,并根据两个条件进行了排序:
Order By
LEFT(InvoiceID, PATINDEX('%[0-9]%', InvoiceID) - 1), --first sort value
CONVERT(INT, SUBSTRING(InvoiceID, PATINDEX('%[0-9]%', InvoiceID), LEN(InvoiceID))) -- second sort value
问题是我需要在许多其他存储过程上使用相同的排序。因此,我想创建一个应用相同排序的函数。虽然我可以使一个函数返回一个值,但是我需要一个如上所述的返回两个值的函数。
此sql函数不起作用:
CREATE FUNCTION [dbo].[fn_AlphaNumreicSort] (@AlphaNumreicValue nvarchar(MAX))
RETURNS (
@SortedVar1 nvarchar(MAX)
,@SortedVar2 nvarchar(MAX)
)
AS
....
处理此问题的最佳方法是什么?
答案 0 :(得分:2)
要返回多个值,您需要声明一个表值函数。
在您的情况下,您也可以创建内联函数,它的另一个好处是它可以像part of the query一样运行得更快。
java.time
然后,您在带有create function [dbo].[fn_AlphaNumreicSort] (@AlphaNumreicValue nvarchar(MAX))
returns table
as
return (
select
LEFT(@AlphaNumreicValue, PATINDEX('%[0-9]%', @AlphaNumreicValue) - 1) as SortedVar1,
CONVERT(INT, SUBSTRING(@AlphaNumreicValue, PATINDEX('%[0-9]%', @AlphaNumreicValue), LEN(@AlphaNumreicValue))) as SortedVar2
);
的查询中使用它:
outer apply