6,129
社区成员
发帖
与我相关
我的任务
分享
/*----------------------------------------------------------------
-- 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
*/