共计 3403 个字符,预计需要花费 9 分钟才能阅读完成。
SQLServer 中怎么导入导出数据,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
1. SQL Server 导入导出向导, 这种方式是最方便的. 导入向导, 微软提供了多种数据源驱动, 包括 SQL Server Native Cliant, OLE DB For Oracle,Flat File Source,Access,Excel,XML 等, 基本上可以满足系统开发的需求. 同样导出向导也有同样多的目的源驱动, 可以把数据导入到不同的目的源. 对数据库管理人员来说这种方式简单容易操作, 导入时 SQL Server 也会帮你建立相同结构的 Table. 2. 用.NET 的代码实现 (比如有一个 txt 或是 excel 的档案, 到读取到 DB 中) 2.1 最为常见的就是循环读取 txt 的内容, 然后一条一条的塞入到 Table 中. 这里不再赘述. 2.2 集合整体读取, 使用 OLEDB 驱动. 代码如下: 复制代码 代码如下:
string strOLEDBConnect = @ Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\1\;Extended Properties= text;HDR=Yes;FMT=Delimited OleDbConnection conn = new OleDbConnection(strOLEDBConnect); conn.Open(); SQLstmt = select * from 1.txt // 读取.txt 中的数据 DataTable dt=new DataTable(); OleDbDataAdapter da = new OleDbDataAdapter(SQLstmt, conn); da.Fill(dt);// 在 DataSet 的指定范围中添加或刷新行以匹配使用 DataSet、DataTable 和 IDataReader 名称的数据源中的行。if(dt.Rows.Count 0) foreach(DataRow dr in dt.Rows) {SQLstmt = insert into MyTable values( + dr…
3.BCP, 可以用作大容量的数据导入导出, 也可以配合 xp_cmdshell 来使用. 语法: BCP 语法复制代码 代码如下:
bcp {[[database_name.][schema].]{table_name | view_name} | query } {in | out | queryout | format} data_file [-mmax_errors] [-fformat_file] [-x] [-eerr_file] [-Ffirst_row] [-Llast_row] [-bbatch_size] [-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90)] [-q] [-C { ACP | OEM | RAW | code_page} ] [-tfield_term] [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size] [-S [server_name[\instance_name]]] [-Ulogin_id] [-Ppassword] [-T] [-v] [-R] [-k] [-E] [-h hint [,…n] ]
请注意数据导入导出的方向参数:in,out,queryout 如: 如: 4.BULK INSERT. T-SQL 的命令, 允许直接导入数据 语法: 复制代码 代码如下:
BULK INSERT [database_name. [ schema_name] . | schema_name. ] [table_name | view_name] FROM data_file [WITH ( [ [ ,] BATCHSIZE =batch_size ] [[ ,] CHECK_CONSTRAINTS ] [[ ,] CODEPAGE = {ACP | OEM | RAW | code_page} ] [[ ,] DATAFILETYPE = {char | native | widechar | widenative} ] [[ ,] FIELDTERMINATOR = field_terminator ] [[ ,] FIRSTROW = first_row ] [[ ,] FIRE_TRIGGERS ] [[ ,] FORMATFILE = format_file_path ] [[ ,] KEEPIDENTITY ] [[ ,] KEEPNULLS ] [[ ,] KILOBYTES_PER_BATCH =kilobytes_per_batch ] [[ ,] LASTROW =last_row ] [[ ,] MAXERRORS =max_errors ] [[ ,] ORDER ({ column [ ASC | DESC] } [,…n] ) ] [[ ,] ROWS_PER_BATCH =rows_per_batch ] [[ ,] ROWTERMINATOR = row_terminator ] [[ ,] TABLOCK ] [[ ,] ERRORFILE = file_name ] )]
重要参数: FIELDTERMINATOR, 字段分隔符 FIRSTROW: 第一个数据行 ROWTERMINATOR: 行终结符 如: 复制代码 代码如下:
BULK INSERT dbo.ImportTest FROM C:\ImportData.txt WITH (FIELDTERMINATOR = , , FIRSTROW = 2)
5. OPENROWSET 也是 T -SQL 的命令, 包含有 DB 连接的信息和其它导入方法不同的是,OPENROWSET 可以作为一个目标表参与 INSERT,UPDATE,DELETE 操作. 语法: 复制代码 代码如下:
OPENROWSET ({ provider_name , { datasource user_id password | provider_string} , {[ catalog.] [schema.] object | query } | BULK data_file , {FORMATFILE = format_file_path [ bulk_options] | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB } } ) bulk_options ::= [, CODEPAGE = { ACP | OEM | RAW | code_page} ] [, ERRORFILE = file_name] [, FIRSTROW = first_row] [, LASTROW = last_row] [, MAXERRORS = maximum_errors] [, ROWS_PER_BATCH =rows_per_batch]
如: 复制代码 代码如下:
INSERT INTO dbo.ImportTest SELECT * FROM OPENROWSET(Microsoft.Jet.OLEDB.4.0 , Excel 8.0;Database=C:\ImportData.xls , SELECT * FROM [Sheet1$] WHERE A1 IS NOT NULL)
6.OPENDATASOURCE 语法: OPENDATASOURCE (provider_name,init_string) 如: 复制代码 代码如下:
INSERT INTO dbo.ImportTest SELECT * FROM OPENDATASOURCE(Microsoft.Jet.OLEDB.4.0 , Data Source=C:\ImportData.xls;Extended Properties=Excel 8.0)…[Sheet1$]
7.OPENQUERY. 是在 linked server 的基础上执行的查询. 所以执行之前必须先建立好 link server.OPENQUERY 的结果集可以作为一个 table 参与 DML 的操作. 语法: OPENQUERY (linked_server , query) 如: 复制代码 代码如下:
EXEC sp_addlinkedserver ImportData , Jet 4.0 , Microsoft.Jet.OLEDB.4.0 , C:\ImportData.xls , NULL, Excel 8.0 GO INSERT INTO dbo.ImportTest SELECT * FROM OPENQUERY(ImportData, SELECT * FROM [Sheet1$] )
看完上述内容,你们掌握 SQLServer 中怎么导入导出数据的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!