2012-05-07 35 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)