Генерация уникальной строки с помощью UDFunction - PullRequest
1 голос
/ 19 декабря 2011

Я сгенерировал строку для идентичной функции моего столбца Primarykey.но его поведение неожиданно.это удаление всех 0 строкой и сохранение только одного символа.Поправь меня Где я не прав ..

Alter FUNCTION [dbo].[UDF_GenerateBatchNumber]  (@BatchNumber as Varchar(10))
Returns Varchar
AS
BEGIN
    -- Declare the return variable here

    -- Add the T-SQL statements to compute the return value here
    Select Top(1) @BatchNumber=[BatchNo] From TBL_iBATCH Order by [BatchNo] desc
    IF @BatchNumber is Null
        BEGIN
         Set @BatchNumber ='B000001'
        END
    Else
        BEGIN
          Set @BatchNumber='B'+Convert(Varchar(7),(Cast(SUBSTRING(@BatchNumber,2,7) as Integer)+1))
        END  

    RETURN @BatchNumber

END

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

Обычным способом является создание вычисляемого столбца с использованием столбца IDENTITY.
Этот UDF завершится с ошибкой под нагрузкой и даст 2 одинаковым ключам

ALTER  TABLE TBL_iBATCH
   ADD BatchNumber AS CAST('B' + RIGHT('000000' + CAST(MyIDCol AS varchar(6)), 6) AS char(7)) PERSISTED;

ALTER  TABLE TBL_iBATCHWITH CHECK 
   ADD CONSTRAINT PK_TBL_iBATCH PRIMARY KEY (BatchNumber);
2 голосов
/ 19 декабря 2011

Предполагается, что номер строки является фиксированным.изменить подстроку (@ BatchNumber, 2,7) как целое число ... на

 @BatchNumber='B'+Convert(Varchar(7),(Cast(SUBSTRING(@BatchNumber,2,6) as Integer)+1))

Причина: ваша подстрока пытается захватить нулевую позицию 7, когда ее нет;это значение будет нулевым, поэтому в качестве выходных данных будет указан только B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...