我使用以下代码定义了一个存储过程:
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
!
答案 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。