存储过程不能完美运行

时间:2014-08-23 04:22:59

标签: sql-server stored-procedures

我使用以下代码定义了一个存储过程:

ALTER PROCEDURE [dbo].[spSCT_Insert_to_SCT_AccessPermission] 
(
    @AccessPesrmission_VahedSazmani_ID char(5)=NULL,
    @AccessPesrmission_GorohKarmandi_ID char(10)=NULL,
    @AccessPesrmission_Semat_ID char(13)=NULL,
    @AccessPesrmission_Personel_ID  char(8)=NULL,
    @AccessPermission_Read bit =NULL,
    @AccessPermission_Edit bit=NULL ,
    @AccessPermission_Delete bit=NULL ,
    @AccessPermission_Add bit=NULL ,
    @AccessPesrmission_SatheSazmani_ID char(2)=NULL ,
    @AccessPesrmission_Source_ID int=NULL
 )
 AS
 BEGIN
    INSERT INTO [dbo].[SCT_AccessPermission]
            ([AccessPesrmission_VahedSazmani_ID]
            ,[AccessPesrmission_GorohKarmandi_ID]
            ,[AccessPesrmission_Semat_ID]
            ,[AccessPesrmission_Personel_ID]
            ,[AccessPermission_Read]
            ,[AccessPermission_Edit]
            ,[AccessPermission_Delete]
            ,[AccessPermission_Add]
            ,[AccessPesrmission_SatheSazmani_ID]
            ,[AccessPesrmission_Source_ID])
      VALUES
            (@AccessPesrmission_VahedSazmani_ID
            ,@AccessPesrmission_GorohKarmandi_ID 
            ,@AccessPesrmission_Semat_ID
            ,@AccessPesrmission_Personel_ID
            ,@AccessPermission_Read
            ,@AccessPermission_Edit
            ,@AccessPermission_Delete
            ,@AccessPermission_Add
            ,@AccessPesrmission_SatheSazmani_ID 
            ,@AccessPesrmission_Source_ID)
 END

我试着像这样使用它:

 DECLARE @return_value int

 EXEC   @return_value = [dbo].[spSCT_Insert_to_SCT_AccessPermission]
         @AccessPesrmission_VahedSazmani_ID = N'01001',
         @AccessPesrmission_GorohKarmandi_ID = N'0101001003',
         @AccessPesrmission_Semat_ID = N'0101001003008',
         @AccessPesrmission_Personel_ID = NULL,
         @AccessPermission_Read = 1,
         @AccessPermission_Edit = 1,
         @AccessPermission_Delete = 1,
         @AccessPermission_Add = 1,
         @AccessPesrmission_SatheSazmani_ID = N'3',
         @AccessPesrmission_Source_ID = 3

  SELECT    'Return Value' = @return_value

但是我收到了这个错误:

  

varchar值'0101001003008'的转换溢出了一个int列。

这是一个字符串,它的类型是varchar ...为什么它会转换为int?我没有将它转换为int!我不希望它被转换为int

2 个答案:

答案 0 :(得分:2)

您收到的错误消息是正确的:

101001003008确实大于2147483647 ((2^31) - 1)int可以容纳的最大值)

您可以使用BigInt列,但我怀疑您可能不应该以这种方式使用自然键...

答案 1 :(得分:1)

它被转换为INT。 INT值可以保持最大值2,147,483,647,远低于101,001,003,008。使用BIGINT的数据类型,因为它可以容纳最大值9,223,372,036,854,775,807。

参考链接:http://msdn.microsoft.com/en-us/library/ms187745.aspx