/*----------------------------------------------------------------
-- Author :feixianxxx(poofly)
-- Date :2010-03-29 14:04:14
-- Version:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
Jul 9 2008 14:43:34
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Evaluation Edition on Windows NT 6.1 <X86> (Build 7600: )
-- CONTENT:關於數據大容量的導入導出小結
----------------------------------------------------------------*/
--前序,開啟xp_cmdshell
--關於xp_cmdshell的一些知識 請看 http://blog.csdn.net/feixianxxx/archive/2009/08/14/4445603.aspx
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
--環境
create table test
(
id int,
value varchar(100)
)
go
insert test values(1,'s1')
insert test values(2,'s2')
insert test values(3,'s3')
insert test values(4,'s4')
go
--1將表的數據導出到TEXT.txt文件中
exec master..xp_cmdshell 'bcp tempdb.dbo.test out e:\test.txt -c -Usa -P123456'
--如果是WINDOWS身份 直接 xec master..xp_cmdshell 'bcp tempdb.dbo.test out e:\test.txt -T -c'
--2將TEXT.txt文件中的數據復制到test1表
select * into test1 from test where 1=2
exec master..xp_cmdshell 'bcp tempdb.dbo.test1 in e:\test.txt -c -Usa -P123456'
select * from test1
--3將TEST表的ID字段復制到TEXT.txt中
exec master..xp_cmdshell 'bcp "SELECT id FROM tempdb.dbo.test" queryout e:\test.dat -T -c'
--4將test表中的第一行移動到text.txt中
exec master..xp_cmdshell 'bcp "SELECT top 1 * from tempdb.dbo.test " queryout e:\test.txt -c -Usa -P123456'
--關閉xp_cmdshell
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE;
--truncate table test
BULK INSERT tempdb..test
FROM 'E:\test.txt'
WITH
(
FIELDTERMINATOR =',',--字段分割符號
ROWTERMINATOR ='\n'--換行符號
)
select * from test
/*
id value
----------- -----------
1 s1
2 asds
3 sadsa
100 2asda*/
--包含訪問 OLE DB 數據源中的遠程數據所需的全部連接信息。
--當訪問鏈接服務器中的表時,這種方法是一種替代方法,並且是一種使用 OLE DB 連接並訪問遠程數據的一次性的臨時方法。
--對於較頻繁引用 OLE DB 數據源的情況,請改為使用鏈接服務器。
--A.將 OPENROWSET 與 SELECT 和 SQL Server Native Client OLE DB 訪問接口一起使用(MSDN)
以下示例使用 SQL Server Native Client OLE DB 訪問接口訪問 TEST.A 表,該表位於遠程服務器 SERVER1 上的 POOFLY 數據庫中.
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=SERVER1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM POOFLY.TEST.A
ORDER BY GroupName, Name') AS a;
--B. 使用 Microsoft OLE DB Provider for Jet(MSDN)
以下示例通過 Microsoft OLE DB Provider for Jet 訪問 Microsoft Access Northwind 數據庫中的 Customers 表。
SELECT CustomerID, CompanyName
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',Customers)
GO
--c.使用 OPENROWSET 將文件數據大容量插入 varchar(max) 列中
/*
為了導入大型對象數據,OPENROWSET BULK 子句支持三個選項,允許用戶以單行或單列行集導入數據文件的內容。
你可以指定其中一個大型對象選項,而不是使用格式化文件。
大型對象選項包括:
SINGLE_BLOB
以單行讀取 data_file 的內容,以 varbinary(max) 類型的單列行集返回內容。
SINGLE_CLOB
以字符讀取指定數據文件的內容,以 varchar(max) 類型的單行、單列行集返回內容,使用的是當前數據庫的排序規則,例如文本或 Microsoft Word 文檔。
SINGLE_NCLOB
以 Unicode 讀取指定數據文件的內容,以 nvarchar(max) 類型的單行、單列行集返回內容,並使用當前數據庫的排序規則。
*/
以下示例創建一個用於演示的小型表,並將名為 Text1.txt 的文件中的文件數據插入 varchar(max) 列中。
CREATE TABLE my_Test(Document varchar(max))
GO
INSERT INTO my_Test
select * FROM OPENROWSET(BULK N'E:\test.txt', SINGLE_CLOB) AS Document
GO
select * from my_Test
/*
Document
-------------------------------------------------------
ASDSADASDSADSADSAFKJHFAS HKLASJHASHBKDSAHKJDHSAKJDHSAKDHSAKDHSA
*/
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。