2012-05-07 38 views
1

我正在MS SQL 2008R2中实现加密。从CVS文件加载数据,我将这些数据存储在临时表中,现在我想将这些数据中的一部分移动到加密的信用卡表中。但是,我不断收到以下错误。插入代码如下表所示。SQL int overflow - 插入加密

客户端ID低于10 - 导致溢出的数字是第一行数据CC号。

错误:

Msg 248, Level 16, State 1, Line 4 The conversion of the varchar value '5105105105105100' overflowed an int column. The statement has been terminated.

Insert语句:

OPEN SYMMETRIC KEY CreditCardKey 
     DECRYPTION BY CERTIFICATE CreditCardCert; 

    insert into CreditCard 
    Select 
     HASHBYTES('SHA1', t.CreditCard), 
     EncryptByKey(key_guid('CreditCardKey'), t.CreditCard), 
     '', 
     RIGHT(4, t.CreditCard), 
     '1', 
     t.Expiration, 
     convert(int, t.ClientID) 
    From TempTbl t 

TempTbl:

  • ClientID int
  • FirstLastCCExpiration - 全部varchar(50)

所有数据似乎都已正确导入。

信用卡式:(目标表)

Hash varbinary(200) 
Encrypted varbinary(400) 
plaintext char(16) 
lastfour int 
servicecode int 
expirationdate Date 
ClientID int 
+1

东西,某处,正试图为CC数转换为'int'。在你发布的代码中只有一个明显的'int'转换 - 如果这些列是你指定的类型,这甚至不需要 - 这是你的实际代码,或者你可能在发布之前过度消毒了它在这里? –

+0

不,这是我在查询窗口中执行的内容的直接副本......我现在只是在考虑解释,我最初从CVS导入数据,出现错误并将其移入新的临时表有更好的数据类型...我认为它/必须被转换为适合这个新表,不确定是否可以这样做? (此举是一个简单的插入...选择*)。 – Volvox

+0

这个新表中的ClientID是什么 - 它实际上是一个int吗? –

回答

0

语法问题是造成溢出: 我的RIGHT函数的使用反转的字符和INT抵消,溢出功能的整数表达式。

正确的使用方法:

RIGHT (character_expression , integer_expression)