【问题标题】:How to import data from a view in another database (in another server) into a table in SQL Server 2000?如何将数据从另一个数据库(在另一个服务器)中的视图导入到 SQL Server 2000 中的表中?
【发布时间】:2011-01-17 23:22:20
【问题描述】:

我正在考虑使用 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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    1. 为另一个数据库创建一个linked server instance
    2. 使用INSERT 语句,以便根据链接服务器实例中公开的数据库中的记录填充表。

    除了可能更高效之外,您只需设置一次链接服务器实例,而不是在每次要移动数据时运行 BCP 来创建输出脚本。

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

    【讨论】:

    • 非常感谢小马们!链接服务器实例的工作效率非常高......感谢大家回答我的问题:)
    【解决方案2】:

    确定!!

    在你的源机器上使用这个命令(根据你的需要采用它):

    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)
    

    这应该从源服务器获取“视图名称”的内容,将其放入临时文件中,然后将该文件插入新服务器上的新数据库中。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 2010-09-16
      相关资源
      最近更新 更多