Предел приращения SQL - PullRequest
       3

Предел приращения SQL

0 голосов
/ 11 октября 2018
DECLARE @AbbrvCount INT    
DECLARE @Abbreviation NVARCHAR(50)

SET @Abbreviation = 'PHMY'
SET @AbbrvCount = (2+ LEN(@Abbreviation)+ 1)    

DECLARE @CDCode NVARCHAR(50)

SET @CDCode = (SELECT CONCAT('CD', @Abbreviation, ISNULL((SELECT TOP 1 SUBSTRING(CashierDepositCode, @AbbrvCount, 50 - @AbbrvCount)
               FROM CashierDepositSlips
               WHERE SUBSTRING(CashierDepositCode, 3, LEN(@Abbreviation)) = @Abbreviation
               ORDER BY CashierDepositCode DESC) + 1, '1')))

У меня проблема, когда мой @CDCode достигает "CDPHMY10", он больше не увеличивается.Помощь будет оценена.Я хочу увеличить его до "CDPHMY11" и так далее .. Спасибо

1 Ответ

0 голосов
/ 11 октября 2018

Вам нужно извлечь числовую часть, а затем преобразовать в целое число, прежде чем вы сможете упорядочить, как вам нужно

STUFF(CashierDepositCode, 1, @AbbrvCount - 1, ''), чтобы извлечь числовую часть кода.Но результат все еще в строке.Поэтому, если вы закажете его, «10» появится раньше, чем 9

Измените на следующее

SET @CDCode =   
    (
        SELECT CONCAT('CD', 
                      @Abbreviation, 
                      ISNULL(( SELECT TOP 1 STUFF(CashierDepositCode, 1, @AbbrvCount - 1, '')
                               FROM       CashierDepositSlips
                               WHERE      SUBSTRING(CashierDepositCode, 3, LEN(@Abbreviation)) = @Abbreviation
                               ORDER BY   CONVERT(INT, STUFF(CashierDepositCode, 1, @AbbrvCount - 1, '')) DESC) + 1, '1'))
    )

Кроме того, если префикс CD фиксирован, то он будет лучшеизменить WHERE на

WHERE CashierDepositCode LIKE 'CD' + @Abbreviation + '%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...