如何使用SQL增加While循环中的NVarchar值?

时间:2013-03-19 06:42:26

标签: sql sql-server tsql

我试图增加像这样的变量的nvarchar值;

    declare @i int
    set @i = 0
    -- I want a book `@BookSerialNo`  to be increment like e.g abcde-1, abcde-2 
    set @BookSerialNo = CAST(@BookSerialNo +'-' + @i as nvarchar(50));
    WHILE(@i<>@Quantity)
        BEGIN
            INSERT INTO Library.BookDetail
            (
                BookId,
                BookSerialNo,
                CreatedBy,
                CreateDate,
                UpdateDate,
                Updateby
            )
            VALUES
            (
                @BookId,
                @BookSerialNo,
                @CreatedBy,
                @CreatedDate,
                @UpdatedDate,
                @UpdatedBy
            )
            SET @i = @i+1;
        END

所以,我的问题是,
如何在循环中增加@BookSerialNo eache time的值?
我希望它像例如'abcdef-1','abcdef-2','abcdef-3',我只想在' - '之后加上数字。

3 个答案:

答案 0 :(得分:7)

试试这个..

    set @BookSerialNo = @BookSerialNo +'-0';
    WHILE(@i<>@Quantity)
        BEGIN
            INSERT INTO Library.BookDetail
            (
                BookId,
                BookSerialNo,
                CreatedBy,
                CreateDate,
                UpdateDate,
                Updateby
            )
            VALUES
            (
                @BookId,
                @BookSerialNo,
                @CreatedBy,
                @CreatedDate,
                @UpdatedDate,
                @UpdatedBy
            )
            SET @i = @i+1;
            --increment the serialno also
            SET @BookSerialNo = SUBSTRING(@BookSerialNo, 0, CHARINDEX('-',@BookSerialNo)+1);  
            set @BookSerialNo = @BookSerialNo + CAST (@i as nvarchar(50));
        END

答案 1 :(得分:2)

只需移动set内的while

WHILE(@i<>@Quantity)
    BEGIN
    set @BookSerialNo = cast(@BookSerialNo as nvarchar(50)) +'-' + 
                        cast(@i as nvarchar(50));
    ....
    SET @i = @i+1;
    END

答案 2 :(得分:0)

假设@BookSerialNo数据类型为nvarchar

Try this

WHILE(@i<>@Quantity)
BEGIN
    set @BookSerialNo = @BookSerialNo +'-' + CONVERT(NVARCHAR(50),@i);
    ....
    SET @i = @i+1;
END