【问题标题】:Stored Procedure Error Arithmetic overflow error converting numeric to data type varchar存储过程错误算术溢出错误将数字转换为数据类型 varchar
【发布时间】:2020-06-17 20:41:52
【问题描述】:

我知道这个问题已经被问过很多次了。 但是我用谷歌搜索了很多,也在这里查看了答案,但无法理解为什么我的存储过程反复出现此错误,因为不久前相同的代码运行良好。

请任何人都可以帮助我确定为什么会出现此错误。 此外,即使当它工作时,我也没有得到我想要的输出,因为我想按顺序生成订单号,但我得到的数字与计数相同。

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 中的错误

请查找结果 所有订单号都相同,但我想要连续的方式。

【问题讨论】:

  • 打印 SCOPE_IDENTITY() 结果,它可能给出大于 7 位的输出。
  • 是的,正确..它给出了添加数字的输出。在那种情况下,你能告诉我如何限制它 7 only
  • 根据需要使用 right(SCOPE_IDENTITY(),7) 或 left(SCOPE_IDENTITY(),7) 函数。
  • 我已经在使用正确的功能,但仍然出现此错误
  • 但是你是在投射后使用的,所以你得到了错误。

标签: sql sql-server stored-procedures sql-server-2012


【解决方案1】:

只要改变这一行

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

【讨论】:

  • 谢谢@Atk 它解决了我的错误。您能否也解决我的第二个问题。这对我很有帮助。
  • 运行这个查询并分享输出,以便我可以帮助你@KarthikSaxena
  • 请立即查看。
  • 我仍然得到重复的值,就像我在编辑的问题中显示的那样
  • @KarthikSaxena 共享表的架构 [sost].ServiceOrderNumberSequence
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多