SQL Server Bulk Insert 只需要部分欄位時的方法

來源:互聯網
上載者:User

根據一般做法的話,匯出部分欄位時沒有辦法產生格式化XML檔案,所以匯入時就沒有辦法格式化匯入資料。

我想到兩點,1.手工修改格式化XML檔案,2.創造一個能產生格式化XML檔案的中間對象。

在MSDN中尋找方法時,突然想到可以使用視圖來做中間對象,於是就搭一個測試下。以下是測試記錄:

複製代碼 代碼如下:USE master
GO
CREATE DATABASE [db_test]
GO
USE db_test
GO
CREATE TABLE dbo.T_test(
ID [int] IDENTITY(1,1) NOT NULL,
Code varchar(10) ,
Name varchar(100) ,
Memo nvarchar(500) ,
Memo2 ntext ,
PRIMARY KEY (ID)
)
GO
--上面建立的表是來源資料表,下面建立是要匯入資料的表,只有源表的三個欄位
Select Code, Name,Memo into dbo.T_test2 from dbo.T_test Where 1=2

--需求就是把表T_test中的Code,Name匯入到T_test2。
--接下來,就是產生匯入目標表的格式化XML檔案,可是MSDN上說只能產生某個對象的格式化XML檔案。
--只好建立一個中間對象來達到目的,這裡我建立的是一個視圖。
--視圖只包含需要匯入的欄位
Create View v_test
AS
Select Code,Name From dbo.T_test2
--然後就是BCP操作
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;
GO
EXEC master..xp_cmdshell 'BCP db_test.dbo.v_test format nul -f C:/v_test_fmt.xml -x -c -T -S MyPC\MyDB'
GO
EXEC master..xp_cmdshell 'BCP "select Code, Name from db_test.dbo.T_test" queryout C:/t_test.data -f C:/v_test_fmt.xml -T -S MyPC\MyDB'
GO

--格式檔案和資料檔案都有了,就成了.
BULK INSERT db_mgr.dbo.v_t1
FROM N'C:/t_test.data'
WITH
(
FORMATFILE = N'C:/v_test_fmt.xml'
)
GO
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 0;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;
GO
Drop Database db_test
GO

環境是sql2005。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.