Java調用BCP導入數據到數據庫解決標識列ID問題 – JAVA編程語言程序開發技術文章

①要導入的數據如下:
 

 
紅框框的則是標識列,自動增長。
但是,我們使用瞭
 
bcp sportSys.dbo.competitions in %1competitions.xls -c -T >>%2import.txt
②導入數據之後,發現數據出現瞭問題。
 
 
可以很清晰的發現,ID變瞭,由此帶來的問題也就可想而知瞭,怎麼解決這個問題呢?
有人提出瞭下面的這種做法:
 
SET IDENTITY_INSERT tb ON–把顯式值插入表的標識列中。 
INSERT INTO….. 
SET IDENTITY_INSERT tb OFF–完成之後關閉選項

這條語句使用的時候,隻能一張表一張表的導入,也就失去瞭批量導入的意義瞭。
而且直接寫在我們的bat文件中還會提示
SET IDENTITY_INSERT sportSys.dbo.compet 
itions on 
環境變量 IDENTITY_INSERT sportSys.dbo.competitions 沒有定義 
 
經查閱文檔發現,bcp已經為我們提供瞭一個非常好的解決方法,加上-E
這個參數,即可解決標識列的問題!
下面是-E 參數的詳細介紹,
-E  
Specifies that identity value or values in the imported data file are to be used for the identity column. If -E is not given, the identity values for this column in the data file being imported are ignored, and SQL Server automatically assigns unique values based on the seed and increment values specified during table creation.  
 
If the data file does not contain values for the identity column in the table or view, use a format file to specify that the identity column in the table or view should be skipped when importing data; SQL Server automatically assigns unique values for the column. For more information, see DBCC CHECKIDENT (Transact-SQL). 
 
The -E option has a special permissions requirement. For more information, see "Remarks" later in this topic. 
 
 
如果bcp導入的時候,沒有加入-E這個參數,則對於目標表中的標識列的處理則由Sql Server 自動的來處理,因此得出的ID值就不是我們想要的瞭。

作者:w156445045

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *