基本上,表有一个header-column和一个sequence-column。该序列包括' aa',' ab'' ac'等
我试图创建一个给出标题输入的函数,它给出了下一个可能的序列。例如,如果最后一个序列以' a'开头。结束于' d' (序列' ad'),它给出了' ae'。 首先,我选择当前最高的'序列(MAX),然后我更新第二个字母
我的代码:
ALTER FUNCTION [dbo].[fctCalculateNextSeqCode]
(
-- Add the parameters for the function here
@Input nvarchar(50)
)
RETURNS nvarchar
AS
BEGIN
DECLARE @NewSeq nvarchar(50)
DECLARE @OldSeq nvarchar(50)
SET @OldSeq = (select Max(SMTRPD_Sequence) from dbo.TbOrgSM_Transactions_PriceLines_Definition where SMTRPD_Header2 = @Input)
--first character remains, second character is next in alphabet
select @NewSeq = LEFT(@OldSeq,1) + CHAR(ASCII(RIGHT(@OldSeq,1))+1);
-- Return the result of the function
RETURN @NewSeq
END
当我尝试运行该函数时,它只返回序列的第一个字符,而不是第二个字符。我做错了什么?
答案 0 :(得分:6)
您应该将RETURNS
写为RETURNS nvarchar(50)
,因为nvarchar
的默认长度为1个字符长。
修改强>
对于nchar [ ( n ) ]
和nvarchar [ ( n | max ) ]
,当在数据定义或变量声明语句中未指定n时,默认长度为1.如果未使用CAST
函数指定n,则默认长度为30。
请查看更多信息here