Sql 存储过程错误算术溢出错误将数字转换为数据类型varchar

Sql 存储过程错误算术溢出错误将数字转换为数据类型varchar,sql,sql-server,stored-procedures,sql-server-2012,Sql,Sql Server,Stored Procedures,Sql Server 2012,我知道这个问题已经被问了很多次了。 但我在谷歌上搜索了很多,也在这里查看了答案,但无法理解为什么我的存储过程会反复给出这个错误,因为不久前同一代码工作得非常好 请任何人都可以帮助我确定这个错误的原因。 而且,即使当这是工作时,我没有得到我想要的输出,因为我想按顺序生成订单编号,但我得到的编号与计数编号相同 USE [Sost_Dev] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [sost].[Get

我知道这个问题已经被问了很多次了。 但我在谷歌上搜索了很多,也在这里查看了答案,但无法理解为什么我的存储过程会反复给出这个错误,因为不久前同一代码工作得非常好

请任何人都可以帮助我确定这个错误的原因。 而且,即使当这是工作时,我没有得到我想要的输出,因为我想按顺序生成订单编号,但我得到的编号与计数编号相同

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中的错误,请参见下图

请查找结果所有订单号都是相同的,但我希望以连续的方式。

只要换一行就行了

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);

打印范围_IDENTITY()结果,它可能给出大于7位的输出。是正确的。。它给出了加法数字的输出。在这种情况下,你能告诉我如何限制它7只使用右(SCOPE_IDENTITY(),7)或左(SCOPE_IDENTITY(),7)函数,根据你的需要。我已经在使用右函数,但我仍然遇到了这个错误,但是你在施法后立即使用,因此你得到了错误。谢谢@Atk it解决了我的错误。你能帮我解决第二个问题吗。这对我会有很大帮助。运行此查询并共享输出,这样我就可以帮助您@Karthiksaxena。请现在检查。我仍然会得到重复的值,就像我在编辑的question@KarthikSaxena表[sost]的共享架构。ServiceOrderNumberSequence