程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> 使用SqlBulkCopy時應注意Sqlserver表中使用缺省值的列

使用SqlBulkCopy時應注意Sqlserver表中使用缺省值的列

編輯:更多數據庫知識

SqlBulkCopy 來自數據源的 String 類型的給定值不能轉換為指定目標列的類型 nvarchar。

image

在網上找了下,大都說是因為數據庫中的字段過小(

來自數據源的 String 類型的給定值不能轉換為指定目標列的類型 nvarchar。
),造成截斷的錯誤導致,仔細檢查後發現我的表設計中沒有字段過小的情況,也不是單引號的問題。

後經仔細調試發現,由於使用SqlBulkCopy導入時我的文本文件與庫中的表列不對應造成的。我的文本文件中有字段18個,而我的表中只使用了9個字段,且有兩個是文本文件中沒有的(即表結構1中的[Level]與[Cagegory]字段),由數據庫填入默認值。表結構如下:
復制代碼 代碼如下:
表結構11
CREATE TABLE [dbo].[Ryxx](
[Name] [nvarchar](30) NOT NULL,
[IdCardNo] [nvarchar](30) NOT NULL,
[Sex] [nvarchar](2) NOT NULL,
[Height] [nvarchar](5) NULL,
[Level] [nvarchar](2) NULL, --默認為A
[Category] [nvarchar](20) NULL, --默認為“重點管理”
[Sponsor] [nvarchar](100) NULL,
[Contact] [nvarchar](30) NULL,
[Phone] [nvarchar](50) NULL,
[Number] [nvarchar](30) NULL

) ON [PRIMARY]

表結構1

修改後的表結構如下
復制代碼 代碼如下:
CREATE TABLE [dbo].[Ryxx](
[Name] [nvarchar](30) NOT NULL,
[IdCardNo] [nvarchar](30) NOT NULL,
[Sex] [nvarchar](2) NOT NULL,
[Height] [nvarchar](5) NULL,
[Sponsor] [nvarchar](100) NULL,
[Contact] [nvarchar](30) NULL,
[Phone] [nvarchar](50) NULL,
[Number] [nvarchar](30) NULL,
[Level] [nvarchar](2) NULL, --默認為A
[Category] [nvarchar](20) NULL --默認為“重點管理”
) ON [PRIMARY]

至此,問題解決。分析原因是因為從文本文件中獲取的字段對應到表中缺省列中去了,產生了截斷,想想使用bcp 時應該也會出現這樣的錯誤。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved