首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >小巧的算术溢出错误--但是数据类型是int?

小巧的算术溢出错误--但是数据类型是int?
EN

Stack Overflow用户
提问于 2015-09-15 15:37:48
回答 1查看 7.2K关注 0票数 1

我有一个存储过程,它将值插入到表中:

代码语言:javascript
复制
ALTER PROCEDURE [dbo].[spSaveAddresses_LegalDescriptions_Determinations]
   @idAddresses_LegalDescriptions_Determinations INT    = NULL OUTPUT,
   @idLogin INT = -32768,
   @idAddress INT = NULL,
   @idLegalDescription INT = NULL,
   @idDetermination INT = NULL
AS
   SET NOCOUNT ON
   SET ROWCOUNT 0
   SET XACT_ABORT ON

   BEGIN TRY
      /* Declare and initialize variables */
      DECLARE   @RC         INT,
                @TranCount  INT

      SELECT    
          @RC = 0,
          @TranCount = @@TRANCOUNT

      /* Insert record into Table #1] */
      IF @TranCount = 0 
      BEGIN TRANSACTION
      BEGIN
           INSERT INTO [TOD].[dbo].[Table#1](idAddress, idLegalDescription,
                                             idDetermination, UpdatedidLogin,
                                             UpdatedDate)
           VALUES(@idAddress, @idLegalDescription,
                  @idDetermination, @idLegalDescription, GETDATE())
     END

     IF @TranCount = 0 AND (XACT_STATE()) = 1 
        COMMIT TRANSACTION
END TRY

BEGIN CATCH
IF (XACT_STATE()) = -1 ROLLBACK TRANSACTION
    EXEC [TOD].[dbo].[spRethrowError]
    SET @RC = 1
END CATCH

SET NOCOUNT OFF
SET ROWCOUNT 0
RETURN @RC
GO

表1的结构:

代码语言:javascript
复制
CREATE TABLE [dbo].[Addresses_LegalDescriptions_Determinations]
(
    [idAddresses_LegalDescriptions_Determinations] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    [idAddress] [int] NULL,
    [idLegalDescription] [int] NULL,
    [idDetermination] [int] NULL,
    [UpdatedidLogin] [smallint] NOT NULL 
         CONSTRAINT [DF_Addresses_LegalDescriptions_Determinations_UpdatedidLogin]  DEFAULT ((0)),
    [UpdatedDate] [datetime] NOT NULL,

    CONSTRAINT [pkAddresses_LegalDescriptions_Determinations] 
        PRIMARY KEY CLUSTERED ([idAddresses_LegalDescriptions_Determinations] ASC)
) ON [DATA]
GO

ALTER TABLE [dbo].[Addresses_LegalDescriptions_Determinations] WITH NOCHECK 
   ADD CONSTRAINT [FK_Addresses_LegalDescriptions_Determinations_Addresses] 
       FOREIGN KEY([idAddress])
       REFERENCES [dbo].[Addresses] ([idAddress])
            ON DELETE CASCADE
            NOT FOR REPLICATION 
GO

ALTER TABLE [dbo].[Addresses_LegalDescriptions_Determinations] 
      CHECK CONSTRAINT [FK_Addresses_LegalDescriptions_Determinations_Addresses]
GO

ALTER TABLE [dbo].[Addresses_LegalDescriptions_Determinations] WITH NOCHECK   
ADD CONSTRAINT [FK_Addresses_LegalDescriptions_Determinations_Determinations]   
    FOREIGN KEY([idDetermination])
    REFERENCES [dbo].[Determinations] ([idDetermination])
ON DELETE CASCADE
NOT FOR REPLICATION 
GO

ALTER TABLE [dbo].[Addresses_LegalDescriptions_Determinations] CHECK    CONSTRAINT [FK_Addresses_LegalDescriptions_Determinations_Determinations]
GO

ALTER TABLE [dbo].[Addresses_LegalDescriptions_Determinations]  WITH NOCHECK   ADD  CONSTRAINT     [FK_Addresses_LegalDescriptions_Determinations_LegalDescriptions] FOREIGN   KEY([idLegalDescription])
REFERENCES [dbo].[LegalDescriptions] ([idLegalDescription])
ON DELETE CASCADE
NOT FOR REPLICATION 
GO

ALTER TABLE [dbo].[Addresses_LegalDescriptions_Determinations] CHECK    CONSTRAINT [FK_Addresses_LegalDescriptions_Determinations_LegalDescriptions]
GO

导致错误的表的结构:

代码语言:javascript
复制
CREATE TABLE [dbo].[LegalDescriptions](
[idLegalDescription] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[LotNumber] [varchar](15) NULL,
[BlockNumber] [varchar](15) NULL,
[SubDivision] [varchar](255) NULL,
[UpdatedDate] [datetime] NOT NULL,
[InsertedDate] [datetime] NULL,
[SubDivisionPhase] [varchar](5) NULL,
[Township] [varchar](20) NULL,
[UpdatedidLogin] [smallint] NOT NULL CONSTRAINT [DF_LegalDescriptions_UpdatedidLogin]  DEFAULT ((0)),
[InsertedIDLogin] [smallint] NULL,
[LegalDescription] [varchar](255) NULL,
[PinNumber] [varchar](30) NULL,
[Range] [varchar](15) NULL,
[SectionLegalDescription] [varchar](15) NULL,
 CONSTRAINT [pkLegalDescriptions] PRIMARY KEY CLUSTERED 
(
    [idLegalDescription] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,  ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [DATA]
) ON [DATA]

GO

SET ANSI_PADDING OFF
GO

当我试图执行存储过程时收到的错误:

Msg 50000,16级,状态1,过程spRethrowError,第42行 错误220,16级,状态1,过程spSaveAddresses_LegalDescriptions_Determinations,第42行 消息:数据类型smallint的算术溢出错误,value = 171922。

我的问题是:

引发错误idLegalDescription的列的所有数据类型都是INT,为什么stored procedure要调用smallint数据类型?我肯定这是我错过的很简单的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-15 15:46:21

你的专栏

代码语言:javascript
复制
 [UpdatedidLogin] [smallint] 

是由

代码语言:javascript
复制
@idLegalDescription                             INT
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32590189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档