脱离 SQL Server“移动”起来

软件世界

  企业中用SQL Server 做后台数据库是相当普遍的,作为系统管理员常要对其中的数据文件进行整理、检查,但要想异地处理庞大的数据库文件是一件困难的事。本文将告诉你一个实用的技巧,通过一张软盘完成数据库的Copy,并且不需要在机器上安装任何的SQL Server软件或插件。

  “移动”数据库的力士──BCP

  这个工具就是SQL Server自带的BCP,中文为“块拷贝程序”。它的意思是表与磁盘文件间的转移,也就是将数据库中的数据转移到一个文件中便于携带,这个文件是一个文本文件。

  这个工具是一个DOS下的工具,使用方法是在DOS下进入SQL Server的目录,然后输入BCP命令和参数。格式如下:

  bcp {[[database_name.][owner].]{table_name | view_name} | “query”} {in | out | queryout | format} data_file [-m max_errors] [-f format_file] [-e err_file] [-F first_row] [-L last_row] [-b batch_size] [-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6] [-q] [-C code_page] [-t field_term] [-r row_term] [-i input_file] [-o output_file] [-a packet_size] [-S server_name[\in stance_name]] [-U login_id] [-P password] [-T] [-v] [-R] [-k] [-E] [-h “hint [,...n]”]

  不过我们没有必要使用这么多参数,这里只对必要的参数作说明。

  [[database_name.][owner].]:表示数据库和所有者。

  table_name | view_name:指定表或视图。

  in | out:输出还是输入数据库。

  data_file :输出或输入的文件。

  [-c]:输出时将所有的数据转换为字符型。

  -U:表或视图的建立者。

  上面的参数是必须使用的,其他的参数各位可以看看SQL Server的帮助文件。

  利用BCP实现数据转移

  现在我们就来通过一个例子看看具体如何操作:

  1.先在SQL Server中的“安全性”──“登录”中建立一个用户名为“g”的用户。并使用sql登录,同时设置密码 。

  2.建立一个数据库“g ”,然后再在此数据库中建立一个表“g”。

  3.在设计表的时候随便输入一些列,数据类型也可以任意选择。

  4.点击“表属性”,在表属性窗口中选择“所有者”为“g”,然后点击“关闭”(图1)。

  5.完成表设计后,运行此表,在表中输入一些数据后关闭表。

  6.打开DOS进入SQL Server的安装目录,输入如下命令并回车,并输入用户g的密码:

  BCP g.g.g out g.txt -c –Ug

  7.随后系统开始自动运行,完成后会有提示。

  BCP g.g.g out g.txt -c –Ug这个命令的含义是:将数据库g中用户g的表g中的数据转换到文本文件g中。由于这个表是用户g建立的,所以我们要使用-U参数。在-U后的g表示用户。

  现在你可以打开这个文本文件,可以看到所有的数据都在里面。如果你没有指定文件的保存位置,那这个文件将保存在SQL Server的安装目录中。现在你就可以将这个文件保存在软盘中了。看看文件的大小,是不是比数据文件和日志文件小了很多呢。

  利用BCP导入数据

  我们除了可以将数据输出到文本文件中,同样可以将文本文件输入到数据库中。下面是具体步骤:

  只要在DOS中输入:BCP g.g.g in g.txt -c –Ug即可。现在再打开g表看看有什么变化没有?

  如果你想将一个表的数据导入到另一个表中,而另一个表的表名和表的建立者是不同的,也可以使用这个方法。

  这里先在SQL Server中的“安全性”──“登录”中建立一个用户名为“a”的用户。并使用sql登录同时设置密码 。再在数据库g中建立一个表名为a的表。注意,在输入列名时可任意输入,但是数据类型必须和“g”表相同,同时列的数目也要和g表的相同。完成后,在DOS中输入如下命令:BCP g.a.a in g.txt -c –Ua,回车后输入用户a的密码即可。

  BCP g.a.a in g.txt -c –Ua这个命令的含义是:将文本文件g输入数据库g中用户a的表a中。由于这个表是用户a的,所以我们要使用-U参数。在-U后的a表示是用户。

  如果你的表a建立错了,将会看到下面的提示(图2)

  本文对BCP命令和用途做了一个简单的说明,但是BCP的功能,远不限于此,有兴趣的读者可以自己研究。