如何将数据从另一个数据库(在另一个服务器中)的视图导入SQL Server 2000中的表?

时间:2010-02-17 17:09:20

标签: sql-server sql-server-2000 bcp

我正在考虑使用bcp命令来解决用户身份验证,但是bcp命令是否能够导入到我的数据库中的表?顺便说一下,我正在使用SQL Server 2000环境。

这是我到目前为止的代码:

  

SET @Command ='bcp“SELECT vwTest。* from [myserver \ sql] .test.dbo.vwTest”queryout dbo.Test -C ACP -c -r \ n -t“;” -S myserver \ sql -Umyuser -Puser1'

  EXEC master.dbo.xp_cmdshell @Command

2 个答案:

答案 0 :(得分:2)

基于the comparison of BCP, BULK INSERT, OPENROWSET (infer Linked Server) here

  

... bcp实用程序在进程外运行。要跨进程内存空间移动数据,bcp必须使用进程间数据封送。进程间数据封送是将方法调用的参数转换为字节流的过程。这会给处理器增加很大的负担。但是,因为bcp [both]解析数据并将[转换]数据转换为客户端进程中的本机存储格式,所以它们可以从SQL Server进程卸载解析和数据转换。

... bcp可能不是传输数据的最有效方法。你可能会更好:

  1. 为其他数据库创建linked server instance
  2. 使用INSERT语句,以便根据链接服务器实例中公开的数据库中的记录填充表。
  3. 除了可能更高效之外,您只需要设置链接服务器实例一次,而不是每次要移动数据时运行BCP来创建输出脚本。

    请注意,链接服务器实例基于其他数据库上的用户,因此对其他数据库的权限基于该用户的权限。

答案 1 :(得分:1)

确定!!

在源计算机上使用此命令(根据需要采用它):

bcp database.dbo.viewname out c:\temp\viewname.bcp

然后使用以下命令将数据导回目标系统:

bcp newdatabase.dbo.importtable in c:\temp\viewname.bcp 
    -c -S(servername) -U(username) -P(password)

这应该从源服务器获取“viewname”的内容,将其放在临时文件中,然后将该文件插回到新服务器上的新数据库中。

通常,您会将这些数据行加载到一个新的临时登台表中,并在那里表单,使用T-SQL或其他方法将该数据插入到您的实际表中。

查看MSDN documentation on bcp in SQL Server 2000了解所有这些开关及其含义的详细信息。

相关问题