sql server 批处理导入数据

struggle1 2009-07-27 06:10:46
在用 批处理 向sql server导入数据表时,报错 提示数据库不存在,拒绝网络访问 net-library error 53:connectionopen

怎么回事啊 ,
与 sql相连的软件 可以连通!

要想向 算起来sql server2000里导入表,txt文本, 怎么做用什么命令!!
...全文
509 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
struggle1 2009-08-03
  • 打赏
  • 举报
回复
在 sql 函数里,那个函数可以进行加密, 就是将 数字和汉字组成的字符组 加密成一组有数字和英文字母组成的字符串!!
超维电脑科技 2009-07-28
  • 打赏
  • 举报
回复
学习
feixianxxx 2009-07-27
  • 打赏
  • 举报
回复
http://blog.csdn.net/feixianxxx/archive/2009/07/21/4365576.aspx

我的博客里也有相关问题。。
你的问题 也许和实例名有关 看看吧 也许对你有帮助
--小F-- 2009-07-27
  • 打赏
  • 举报
回复
如何使用BCP导入数据 

BCP可以通过in命令将上面所导出的currency1.txt和currency2.txt再重新导入到数据库中,由于currency有主键,因此我们将复制一个和currency的结构完全一样的表。

SELECT TOP 0 * INTO AdventureWorks.sales.currency1 FROM AdventureWorks.sales.currency
将数据导入到currency1表中

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -c -T'
导入数据也同样可以使用-F和-L选项来选择导入数据的记录行。

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -c -F 10 -L 13 -T'
在导入数据时可以根据已经存在的格式文件将满足条件的记录导入到数据库中,不满足则不导入。如上述的格式文件中的第三个字段的字符长度是24,如果某个文本文件中的相应字段的长度超过24,则这条记录将不被导入到数据库中,其它满足条件的记录正常导入。

使用普通的格式文件

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -F 10 -L 13 -c -f c:\currency_format1.fmt -T'
使用xml格式的格式文件

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -F 10 -L 13 -c -x -f c:\currency_format2.fmt -T'
feixianxxx 2009-07-27
  • 打赏
  • 举报
回复
struggle1 2009-07-27
  • 打赏
  • 举报
回复
谢谢 各位大侠!!
可是第一个 问题 好像大家都没解决,
就是 有一个批处理文件,他是将一个txt文本导入到sql server 中的,以前都可以正常的运行,今天导时,报错 提示数据库不存在,拒绝网络访问 net-library error 53:connectionopen
我想问问 各位大侠 这是系统没开启 什么服务造成的 还是···(重做了系统)
htl258_Tony 2009-07-27
  • 打赏
  • 举报
回复
用BCP命令或SQL自带的导入导出工具.
sharon8259 2009-07-27
  • 打赏
  • 举报
回复
学习并收藏了!
ChinaJiaBing 2009-07-27
  • 打赏
  • 举报
回复
要想向 算起来sql server2000里导入表,txt文本,

打开企业管理器,右击数据库->导入\导出,再生成角本...

sdhdy 2009-07-27
  • 打赏
  • 举报
回复
联机帮助里都有,可以参考一下。
将数据从数据文件复制到 SQL Server
若要将数据文件大容量复制到 Microsoft® SQL Server™ 实例,请遵循以下准则:

将数据大容量复制到没有索引的表中时,如果在通常情况下使用完整恢复模式,则将恢复模式设置为大容量日志记录模式。
这是推荐的方法,因为日志不记录行插入操作,所以有助于防止事务日志耗尽空间。系统管理员或数据库所有者可以设置此选项。有关更多信息,请参见有日志记录和最小日志记录的大容量复制操作。

如果要装载的数据与表中已存在的数据相比数量较大,在执行大容量复制操作之前删除表的索引会提高大容量复制速度。
反之,如果要装载的数据与表中已存在的数据相比数量较小,则不必删除索引,因为重建索引的时间可能比执行大容量复制操作的时间要长。有关更多信息,请参见优化大容量复制性能。

确保用 bcp(或使用 BULK INSERT 语句时的查询工具)登录到 SQL Server 时所用的用户帐户对表具有 SELECT 和 INSERT 权限(由表的所有者指派)。


说明 只有 sysadmin 固定服务器角色的成员可以执行 BULK INSERT 语句。

如果恢复模式是简单模式,则建议使用完整备份或差异备份;如果恢复模式是大容量日志记录模式或完整恢复模式,使用日志备份就足够了。有关更多信息,请参见备份和还原操作。


为了使用 bcp 实用工具或 BULK INSERT 语句将数据从数据文件成功地大容量复制到表中,必须了解并指定数据文件中的终止符。


说明 当试图将数据大容量复制到 SQL Server 实例中时,ASCII 数据文件中的隐藏字符可能导致问题,出现"发现意外的空值"错误信息。许多实用工具和文本编辑器可显示隐藏字符,通常可以在数据文件的底部找到这些字符。找到并删除这些字符可以解决此问题。


Newpubs.dat 文件为:

1111,Stone Age Books,Boston,MA,USA
2222 ,Harley & Davidson,Washington,DC,USA
3333 ,Infodata Algosystems,Berkeley,CA,USA

因为该数据文件均为字符数据,所以需要指定以下选项和开关。

大容量复制选项 bcp 实用工具开关 BULK INSERT 子句
字符模式格式 -c DATAFILETYPE = 'char'
字段终止符 -t FIELDTERMINATOR
行终止符 -r ROWTERMINATOR


在 Newpubs.dat 文件中,行中每个字段均以逗号 (,) 结束,而每行均以换行符 (\n) 结束。

下例中的 publishers2 表可以通过执行以下命令创建:

USE pubs
GO
SELECT * INTO publishers2 FROM publishers
GO

若要将数据从 Newpubs.dat 大容量复制到 publishers2,可以使用以下命令:

bcp pubs..publishers2 in newpubs.dat -c -t , -r \n -Sservername -Usa -Ppassword

另外,也可以在 SQL 查询分析器这样的查询工具中使用 BULK INSERT 语句来大容量复制数据:

BULK INSERT pubs..publishers2 FROM 'c:\newpubs.dat'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

Newpubs.dat 文件中的数据现在已追加到 publishers2 中:

Pub_id pub_name city state Country
------ ---------------- ---------- ----- -----
0736 New Moon Books Boston MA USA
0877 Binnet & Hardley Washington DC USA
1111 Stone Age Books Boston MA USA
1389 Algodata Infosystems Berkeley CA USA
1622 Five Lakes Publishing Chicago IL USA
1756 Ramona Publishers Dallas TX USA
2222 Harley & Davidson Washington DC USA
3333 Infodata Algosystems Berkeley CA USA
9901 GGG&G München Germany
9952 Scootney Books New York NY USA
9999 Lucerne Publishing Paris France


复制包含标识值的数据
bcp 实用工具和 BULK INSERT 语句允许将包含标识值的数据文件大容量复制到 SQL Server 实例中。为防止 SQL Server 提供标识值,bcp 实用工具接受 -E 开关,并且 BULK INSERT 语句接受 KEEPIDENTITY 子句。当数据文件中的行大容量复制到表中时,SQL Server 不会自动地指派唯一标识值;标识值将从数据文件中获得。

如果未提供这些选项,则将忽略被导入数据文件中标识符列的值,而是由 SQL Server 根据表创建期间指定的种子值和增量值自动指派唯一值。如果数据文件不包含表中标识符列的值,则使用格式文件指定导入数据时应跳过的标识符列。SQL Server 自动赋给该列唯一值。

导入 image 数据
可以将数据文件作为 image 数据大容量复制到 SQL Server 实例中。使用 bcp 实用工具将数据文件 Test.doc 装载到 pubs 数据库的 bitmap 表中的命令是:

bcp pubs..bitmap in test.doc -Usa -Ppassword -Sservername

bcp 将提示:

Enter the file storage type of field c1 [image]:
Enter the prefix length of field c1 [4]: 0
Enter length of field c1 [4096]: 5578
Enter the field terminator [none]:

在该示例中,数据文件将装载到列 c1,而 5578 是数据文件的长度。

使用 BULK INSERT 语句时,需要首先创建格式文件,然后用该文件提供格式信息。若要创建格式文件,请使用 bcp 实用工具:

bcp pubs..bitmap out c:\bitmap.txt -Sservername -Usa -Ppassword

bcp 实用工具提示输入 bitmap 中每一列的文件存储类型、前缀长度、字段长度和字段终止符。下表列出了 c1 列的值。

提示 值
文件存储类型 Image
前缀长度 0
字段长度 5578
字段终止符 无


Bcp.fmt 文件的内容如下:

8.0
1
1 SQLIMAGE 0 5578 "" 1 c1

使用 BULK INSERT 语句将 Test.doc 数据文件大容量复制到 pubs 数据库的 bitmap 表中时,请从 SQL 查询分析器这样的查询工具中执行:

BULK INSERT pubs..bitmap FROM 'c:\test.doc'
WITH (
FORMATFILE = 'c:\Bcp.fmt'
)

仙道彰 2009-07-27
  • 打赏
  • 举报
回复
CP是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据。BCP可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出。在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中。
下面将详细讨论如何利用BCP导入导出数据。


1. BCP的主要参数介绍

BCP共有四个动作可以选择。
(1) 导入。
这个动作使用in命令完成,后面跟需要导入的文件名。
(2) 导出。
这个动作使用out命令完成,后面跟需要导出的文件名。
(3) 使用SQL语句导出。
这个动作使用queryout命令完成,它跟out类似,只是数据源不是表或视图名,而是SQL语句。
(4) 导出格式文件。
这个动作使用format命令完成,后而跟格式文件名。

下面介绍一些常用的选项:

-f format_file
format_file表示格式文件名。这个选项依赖于上述的动作,如果使用的是in或out,format_file表示已经存在的格式文件,如果使用的是format则表示是要生成的格式文件。

-x
这个选项要和-f format_file配合使用,以便生成xml格式的格式文件。

-F first_row
指定从被导出表的哪一行导出,或从被导入文件的哪一行导入。

-L last_row
指定被导出表要导到哪一行结束,或从被导入文件导数据时,导到哪一行结束。

-c
使用char类型做为存储类型,没有前缀且以"\t"做为字段分割符,以"\n"做为行分割符。

-w
和-c类似,只是当使用Unicode字符集拷贝数据时使用,且以nchar做为存储类型。

-t field_term
指定字符分割符,默认是"\t"。

-r row_term
指定行分割符,默认是"\n"。

-S server_name[ \instance_name]
指定要连接的SQL Server服务器的实例,如果未指定此选项,BCP连接本机的SQL Server默认实例。如果要连接某台机器上的默认实例,只需要指定机器名即可。

-U login_id
指定连接SQL Sever的用户名。

-P password
指定连接SQL Server的用户名密码。

-T
指定BCP使用信任连接登录SQL Server。如果未指定-T,必须指定-U和-P。

-k
指定空列使用null值插入,而不是这列的默认值。


2. 如何使用BCP导出数据

(1) 使用BCP导出整个表或视图。

BCP AdventureWorks.sales.currency out c:\currency1.txt -c -U"sa" -P"password" --使用密码连接

BCP AdventureWorks.sales.currency out c:\currency1.txt -c -T --使用信任连接

下面是上述命令执行后的输出结果

Starting copy...
105 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 10 Average : (10500.00 rows per sec.)
下面是currency1.txt的部分内容
AED Emirati Dirham 1998-06-01 00:00:00.000
AFA Afghani 1998-06-01 00:00:00.000
... ... ...
... ... ...
ZWD Zimbabwe Dollar 1998-06-01 00:00:00.000

在使用密码登录时需要将-U后的用户名和-P后的密码加上双引号。
注:BCP除了可以在控制台执行外,还可以通过调用SQL Server的一个系统存储过程xp_cmdshell以SQL语句的方式运行BCP。如上述第一条命令可改写为
EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency out c:\currency1.txt -c -U"sa" -P"password"'
执行xp_cmdshell后,返回信息以表的形式输出。为了可以方便地在SQL中执行BCP,下面的命令都使用xp_cmdshell执行BCP命令。

(2) 对要导出的表进行过滤。

BCP不仅可以接受表名或视图名做为参数,也可以接受SQL做为参数。通过SQL语句可以对要导出的表进行过滤,然后导出过滤后的记录。

EXEC master..xp_cmdshell 'BCP "SELECT TOP 20 * FROM AdventureWorks.sales.currency" queryout c:\currency2.txt -c -U"sa" -P"password"'

BCP还可以通过简单地设置选项对导出的行进行限制。

EXEC master..xp_cmdshell 'BCP "SELECT TOP 20 * FROM AdventureWorks.sales.currency" queryout c:\currency2.txt -F 10 -L 13 -c -U"sa" -P"password"'

这条命令使用了两个参数-F 10和-L 13,表示从SELECT TOP 20 * FROM AdventureWorks.sales.currency所查出来的结果中取第条到条记录进行导出。

3. 如何使用BCP导出格式文件

BCP不仅可以根据表、视图导入导出数据,还可以配合格式文件对导入导出数据进行限制。格式文件以纯文本文件形式存在,分为一般格式和xml格式。用户可以手工编写格式文件,也可以通过BCP命令根据表、视图自动生成格式文件。

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:\currency_format1.fmt -c -T'

上述命令将currency表的结构生成了一个格式文件currency_format1.fmt,下面是这个格式文件的内容。
9.0
3
1 SQLCHAR 0 6 "\t" 1 CurrencyCode SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 100 "\t" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 24 "\r\n" 3 ModifiedDate

这个格式文件记录了这个表的字段(共个字段)类型、长度、字符和行分割符和字段名等信息。

BCP还可以通过-x选项生成xml格式的格式文件。

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:\currency_format2.fmt -x -c -T'
xml格式文件所描述的内容和普通格式文件所描述的内容完全一样,只是格式不同。

4. 如何使用BCP导入数据

BCP可以通过in命令将上面所导出的currency1.txt和currency2.txt再重新导入到数据库中,由于currency有主键,因此我们将复制一个和currency的结构完全一样的表。

SELECT TOP 0 * INTO AdventureWorks.sales.currency1 FROM AdventureWorks.sales.currency
将数据导入到currency1表中

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -c -T'
导入数据也同样可以使用-F和-L选项来选择导入数据的记录行。

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -c -F 10 -L 13 -T'
在导入数据时可以根据已经存在的格式文件将满足条件的记录导入到数据库中,不满足则不导入。如上述的格式文件中的第三个字段的字符长度是,如果某个文本文件中的相应字段的长度超过,则这条记录将不被导入到数据库中,其它满足条件的记录正常导入。

使用普通的格式文件

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -F 10 -L 13 -c -f c:\currency_format1.fmt -T'
使用xml格式的格式文件

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -F 10 -L 13 -c -x -f c:\currency_format2.fmt -T'

总结

BCP命令是SQL Server提供的一个快捷的数据导入导出工具。使用它不需要启动任何图形管理工具就能以高效的方式导入导出数据。当然,它也可以通过xp_cmdshell在SQL语句中执行,通过这种方式可以将其放到客户端程序中(如delphi、c#等)运行,这也是使客户端程序具有数据导入导出功能的方法之一。
仙道彰 2009-07-27
  • 打赏
  • 举报
回复

-- 导入文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword'

--导出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword'
--或
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧