Ваша функция не будет работать так, как написано.Вы строите строку больше, чем размер переменной, и когда вы присваиваете переменную @return
, она будет брать самые левые символы, поэтому она всегда будет возвращать 0000000000000
.
Ваш лучшийставка заключается в том, чтобы использовать эту функцию для выполнения заполнения, которое дает вам гораздо больше гибкости, чем то, что вы пытаетесь использовать, так как вы можете указать, сколько символов нужно дополнить (вплоть до длины возвращаемой переменной), а также изменить заполнениесимвол):
CREATE FUNCTION [dbo].[PadString]
( @Seq varchar(16),
@PadWith char(1),
@PadLength int
)
RETURNS varchar(16) AS
BEGIN
declare @curSeq varchar(16)
SELECT @curSeq = ISNULL(REPLICATE(@PadWith, @PadLength - len(ISNULL(@Seq ,0))), '') + @Seq
RETURN @curSeq
END
Это можно использовать
SELECT dbo.PadString ('13', '0', 5)
Пользовательские функции могут использоваться в операторах выбора в качестве другого столбца, если это необходимо.Они обеспечивают большую гибкость в их использовании, чем хранимые процедуры, за счет того, что требуется одно возвращаемое значение, что и есть в данном случае, поэтому UDF идеально подходит.
Эта функция скопирована отсюда:
http://blogs.ugidotnet.org/fgiossi/archive/2007/11/15/how-to-format-a-value-using-t-sql.aspx