Ошибка хранимой процедуры Arithmeti c Ошибка переполнения при преобразовании чисел c в тип данных varchar - PullRequest
1 голос
/ 05 марта 2020

Я знаю, что этот вопрос задавался много раз. Но я много гуглил и также просматривал ответы здесь, но не мог понять, почему моя хранимая процедура неоднократно выдает эту ошибку, поскольку go один и тот же код прекрасно работал.

Пожалуйста, любой может помочь мне определить, почему возникла эта ошибка. Кроме того, даже если это работало, я не получал желаемый результат, так как я хочу генерировать порядковые номера, но я получаю то же число, что и количество.

USE [Sost_Dev]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [sost].[GetExternalOrderNumbers]
    @Count int
AS
BEGIN
    SET NOCOUNT ON;
DECLARE @year VARCHAR(2)
DECLARE @ExternalOrderNumbers nvarchar(50)

SET @year = RIGHT(CAST(DATEPART(yy, GETUTCDATE()) AS VARCHAR(4)),2)

    -- Insert statements for procedure here
BEGIN TRAN
SAVE TRAN seq

            --Creating Temp Table for every isolated connection
            CREATE TABLE #NewOrders(ExtOrderNumber nvarchar(50));

            WHILE @Count > 0
                BEGIN
                   INSERT INTO [sost].ServiceOrderNumberSequence DEFAULT VALUES
                    SET @ExternalOrderNumbers = 'ESON' + @year + RIGHT(REPLICATE('0',10) + CAST(SCOPE_IDENTITY() AS  NVARCHAR(7)) ,7);
                    print 'External' + @ExternalOrderNumbers;
                    --Insert New Order Number to Temporary Tables
                   INSERT INTO #NewOrders  values(@ExternalOrderNumbers)
                   SET @Count -=1
                END

COMMIT

--Fetching Order Numbers from Temporary Table.

SELECT @ExternalOrderNumbers as ExternalOrderNumber from #NewOrders
END

Пожалуйста, см. Изображение ниже для ошибки в моем SQLServer enter image description here

enter image description here

Пожалуйста, найдите результат Все номера заказов одинаковы, но я хочу последовательно. enter image description here

1 Ответ

2 голосов
/ 05 марта 2020

Просто измените эту строку

SET @ExternalOrderNumbers = 'ESON' + @year + RIGHT(REPLICATE('0',10) + CAST(SCOPE_IDENTITY() AS  NVARCHAR(100)) ,7);

Редактировать: КАК согласно вашему требованию.

SET @ExternalOrderNumbers = 'ESON' + @year + RIGHT(REPLICATE('0',10) + CAST(RIGHT(SCOPE_IDENTITY(),7) AS  NVARCHAR(7)) ,7);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...