SQL Server Bulk Insert 只須要部門字段時的辦法。本站提示廣大學習愛好者:(SQL Server Bulk Insert 只須要部門字段時的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server Bulk Insert 只須要部門字段時的辦法正文
依據普通做法的話,導出部門字段時沒有方法生成格局化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。