2014-01-05 2 views
1
ALTER PROCEDURE [dbo].[K_FS_GenerateAutoDCNo] 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @dcno VARCHAR(50), @latestindent VARCHAR(50) 

    SET @dcno = (SELECT '0000') 
    SET @latestindent = (SELECT dcno FROM K_FS_GenerateDcno 
         WHERE sno = (SELECT max(sno)  
            FROM K_FS_GenerateDcno)) 

    IF EXISTS (SELECT dcno FROM K_FS_GenerateDcno WHERE dcno in (@dcno)) 
    BEGIN 
    SELECT (@latestindent + 1) AS dcno 
    END 
    ELSE 
    SELECT (@dcno) AS dcno 
END 

Это показывает первый раз 0000, в следующий раз он показывает 1Как увеличить число?

Но я хочу, чтобы отобразить 0001 .. как я могу это сделать?

Пожалуйста, помогите мне

+0

Эта процедура имеет проблемы с параллелизмом. Вы можете получить дублирующиеся значения под [обычно] большой нагрузкой. –

+0

Я думаю, что может возникнуть небольшая проблема с вашим запросом здесь. После того, как ваш запрос достигнет 9999 записей, какой будет следующий вывод? Даже если он перерабатывается и возвращается как 0001, вы можете получить ошибку ** PK **. Я предлагаю добавить к нему временную метку или дату. См. Эту ссылку http://stackoverflow.com/questions/20883196/incrementing-custom-primary-key-values-in-sql – Mahe

+0

Возможный дубликат http://stackoverflow.com/questions/20883196/incrementing-custom-primary- key-values-in-sql – Mahe

ответ

2

Для левой подушки значение с 0 s до четырех цифр

RIGHT(REPLICATE('0', 4) + CAST(@dcno AS VARCHAR), 4) 

Вот SQLFiddle демо


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

CREATE PROCEDURE K_FS_GenerateAutoDCNo 
AS 
SELECT RIGHT(REPLICATE('0', 4) + CAST(CAST(COALESCE(MAX(dcno), 0) AS INT) + 1 AS VARCHAR), 4) dcno 
    FROM 
(
    SELECT TOP 1 dcno 
    FROM K_FS_GenerateDcno 
    ORDER BY sno DESC 
) q; 

Вот SQLFiddle демо


где я добавить эту строку ..?

В своем коде вы можете изменить

select (@latestindent + 1) as dcno 

в

SELECT RIGHT(REPLICATE('0', 4) + CAST(@latestindent + 1 AS VARCHAR), 4) dcno 

Примечаниетакого метода приращения не одновременно безопасен и подлежат условиям гонки.

+0

+1 Мне нравится, когда вы отвечаете лучше :) –

+0

после 99-го числа, то что произошло – Sambasiva

+0

@SambaSiva '0100' Я думаю. Как вы думаете? – peterm

Смежные вопросы