使用SqlBulkCopy時應注意Sqlserver表中使用預設值的列

來源:互聯網
上載者:User

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

在網上找了下,大都說是因為資料庫中的欄位過小(

來自資料來源的 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 時應該也會出現這樣的錯誤。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.