'声明与 sql 谈话时使用的变量
Dim oServer ' SQL Server 对象
Dim oDatabase ' 要使用的目标数据库
Dim oBCP ' BCP 对象
Dim nRows ' 从 bcp 返回的行数
dim table ' 表对象
on error resume next
' 第一个参数必须是数据库
if WScript.Arguments(0) = "" then
WScript.Echo "您没有提供要连接的数据库" WScript.Quit
end if
' 创建 SQL DMO 的实例
Set oServer = CreateObject("SQLDMO.SQLServer")
' 创建 SQL DMO Bulkcopy 对象的实例
Set oBCP = CreateObject("SQLDMO.BulkCopy")
oServer.EnableBcp = True
' 登录到本地服务器
' 希望您已经更改了 sa 口令!!
oServer.Connect ".", "sa" 
' 连接到提供的数据库
Set oDatabase = oServer.Databases(Wscript.Arguments(0))' 将分隔符设置为逗号
oBCP.ColumnDelimiter = vbComma
' 将文件类型设置为以逗号分隔
oBCP.DataFileType = SQLDMODataFile_CommaDelimitedChar
oBCP.ImportRowsPerBatch = 1000
oBCP.MaximumErrorsBeforeAbort = 1
BCP.RowDelimiter = vbCrLf
oBCP.ServerBCPDataFileType = SQLDMOBCPDataFile_Char
oBCP.UseExistingConnection = True
' 如果未提供表,则转储所有的表
if wscript.Arguments(1) = "" then
for each table in oDatabase.tables
' 确保该表不是系统表
if table.systemobject = false then
oBCP.DataFilePath = table.name & ".csv"
nRows = table.ExportData(oBCP)
wscript.Echo nRows & " rows exported from " & table.name
end if
nextelse ' 设置输出文件
oBCP.DataFilePath = wscript.Arguments(1) & ".csv"
nRows = oDatabase.Tables(wscript.arguments(1)).ExportData(oBCP)
wscript.Echo nRows & " rows exported from " & wscript.arguments(1)
end if
问题应该出在 nRows = oDatabase.Tables(wscript.arguments(1)).ExportData(oBCP)
但不知道该怎么改?
我要实现的一个功能是把sql server中的表导出到txt文件,再load进db2数据库。

解决方案 »

  1.   

    没有错误啊,下面是执行结果:>cscript MSsqlExport.vbs northwind employees
    Microsoft (R) Windows Script Host Version 5.6
    版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。 rows exported from employees但是文件没有生成
    如果用cscript MSsqlExport.vbs northwind导出所有表,也没有结果
      

  2.   

    on error resume next你这个会忽略错误嘛, 把这句去掉
      

  3.   

    Dim oServer 
    Dim oDatabase 
    Dim oBCP 
    Dim nRows 
    dim table
    on error resume next
    if WScript.Arguments(0) = "" then
    WScript.Quit
    end if
    Set oServer = CreateObject("SQLDMO.SQLServer")
    Set oBCP = CreateObject("SQLDMO.BulkCopy")
    oServer.EnableBcp = True
    oServer.Connect "FLYSKY", "sa"
    Set oDatabase = oServer.Databases(Wscript.Arguments(0))
    oBCP.ColumnDelimiter = vbComma
    oBCP.DataFileType = SQLDMODataFile_CommaDelimitedChar
    oBCP.ImportRowsPerBatch = 1000
    oBCP.MaximumErrorsBeforeAbort = 1
    BCP.RowDelimiter = vbCrLf
    oBCP.ServerBCPDataFileType = SQLDMOBCPDataFile_Char
    oBCP.UseExistingConnection = True
    if wscript.Arguments(1) = "" then
    for each table in oDatabase.tables
    if table.systemobject = false then
    oBCP.DataFilePath = table.name & ".csv"
    nRows = table.ExportData(oBCP)
    wscript.Echo nRows & " rows exported from " & table.name
    end if
    nextelse
    oBCP.DataFilePath = wscript.Arguments(1) & ".csv"
    nRows = oDatabase.Tables(wscript.arguments(1)).ExportData(oBCP)
    wscript.Echo nRows & " rows exported from " & wscript.arguments(1)
    end if编译器错误,行33,缺少语句
      

  4.   

    去掉后提示:
    MSsqlExport.vbs(70, 2) Microsoft SQL-DMO: [SQL-DMO]设置大容量复制列格式失败。原确是nRows = oDatabase.Tables(wscript.arguments(1)).ExportData(oBCP)这句出问题,
    在网上找了找,还没找到相应的解决方法..
      

  5.   

    :) 呵呵,没用用过WSH,VBSCRIPT
      

  6.   

    to xyxfly:
    你的脚本我比较了一下,没发现那里有问题。下面的肯定可以执行
    Dim oServer ' SQL Server ¶ÔÏó
    Dim oDatabase ' ÒªÊ¹ÓõÄÄ¿±êÊý¾Ý¿â
    Dim oBCP ' BCP ¶ÔÏó
    Dim nRows ' ´Ó bcp ·µ»ØµÄÐÐÊý
    dim table ' ±í¶ÔÏó
    'on error resume next
    If WScript.Arguments(0) = "" then
    WScript.Echo "ÄúûÓÐÌṩҪÁ¬½ÓµÄÊý¾Ý¿â"
    WScript.Quit
    end if
    Set oServer = CreateObject("SQLDMO.SQLServer")
    Set oBCP = CreateObject("SQLDMO.BulkCopy")
    oServer.EnableBcp = True
    oServer.Connect ".", "sa","sa"
    Set oDatabase = oServer.Databases(Wscript.Arguments(0))oBCP.ColumnDelimiter = vbComma
    oBCP.DataFileType = SQLDMODataFile_CommaDelimitedChar
    oBCP.ImportRowsPerBatch = 1000
    oBCP.MaximumErrorsBeforeAbort = 1
    oBCP.RowDelimiter = vbCrLf
    oBCP.ServerBCPDataFileType = SQLDMOBCPDataFile_Char
    oBCP.UseExistingConnection = True
    If wscript.Arguments(1) = "" then
    for each table in oDatabase.tables
    if table.systemobject = false then
    oBCP.DataFilePath = table.name & ".csv"
    nRows = table.ExportData(oBCP)
    wscript.Echo nRows & " rows exported from " & table.name
    end if
    next
    else
    oBCP.DataFilePath = wscript.Arguments(1) & ".csv" 
    nRows = oDatabase.Tables(wscript.arguments(1)).ExportData(oBCP)
    wscript.Echo nRows & " rows exported from " & wscript.arguments(1)
    end if
      

  7.   

    你加个表名参数吧
    我连接不同的数据库,出现两种情况:一种是出现刚才的错误,
    MSsqlExport.vbs(70, 2) Microsoft SQL-DMO: [SQL-DMO]设置大容量复制列格式失败。
    另一种是:
    C:\Documents and Settings\Bluewater\桌面\db2\pro\tt.vbs(34, 2) Microsoft SQL-DMO
    : [SQL-DMO]名称“order”在 Tables 集合中没有找到。如果该名称是合法名称,则使用 [
    ] 来分隔名称的不同部分,然后重试。
      

  8.   

    cscript tt.vbs northwind order
      

  9.   

    这种错误
    :\Documents and Settings\Bluewater\桌面\db2\pro\tt.vbs(34, 2) Microsoft SQL-DMO
    : [SQL-DMO]名称“order”在 Tables 集合中没有找到。如果该名称是合法名称,则使用 [
    ] 来分隔名称的不同部分,然后重试。
    我回来再试试吧
      

  10.   

    [SQL-DMO]设置大容量复制列格式失败。
    这是真正的问题,
    另一种问题是因为大小写不对
      

  11.   

    多谢多谢!名称“order”在 Tables 集合中没有找到是我把表名写错了
    另外,我在网上查到bcp这个命令行工具,可能用这个更容易解决我的问题?只是参数太多,还没找到资料。
      

  12.   

    bcp 看看这个
    http://blog.csdn.net/zjcxc/archive/2004/02/13/20094.aspx
      

  13.   

    http://topic.csdn.net/t/20030303/11/1484702.html
      

  14.   

    直接使用下面的bat文件导出也可以的,不过分隔符不知道怎么设置成"|"
    bcp "select * from northwind.dbo.orders" queryout d:\school.txt -c -Scrm_why -Usa -Psa
      

  15.   

    http://support.microsoft.com/kb/257425/
      

  16.   

    http://topic.csdn.net/t/20041023/15/3484211.htmlEXEC   master..xp_cmdshell   'bcp "select * from northwind.dbo.orders" queryout d:\school.txt -c -S Flysky -U sa -P -r "|"'
    这样没报错,但结果感觉不是想要的
      

  17.   

    bcp "select * from interfaceboss.dbo.school" queryout d:\school.txt -c -t0x7c -Scrm_why -Usa -Psa
    用-t就可以了不过,如果用dmo的方法的话,那个 [SQL-DMO]设置大容量复制列格式失败。
    该如何解决呢?
      

  18.   

    Dim oServer ' SQL Server ¶ÔÏó
    Dim oDatabase ' ÒªÊ¹ÓõÄÄ¿±êÊý¾Ý¿â
    Dim oBCP ' BCP ¶ÔÏó
    Dim nRows ' ´Ó bcp ·µ»ØµÄÐÐÊý
    dim table ' ±í¶ÔÏó
    'on error resume next
    If WScript.Arguments(0) = "" then
    WScript.Echo "ÄúûÓÐÌṩҪÁ¬½ÓµÄÊý¾Ý¿â"
    WScript.Quit
    end if
    Set oServer = CreateObject("SQLDMO.SQLServer")
    Set oBCP = CreateObject("SQLDMO.BulkCopy")
    oServer.EnableBcp = True
    oServer.Connect ".", "sa",""
    Set oDatabase = oServer.Databases(Wscript.Arguments(0))oBCP.UseExistingConnection = True
    If wscript.Arguments(1) = "" then
    for each table in oDatabase.tables
    if table.systemobject = false then
    oBCP.DataFilePath = table.name & ".csv"
    nRows = table.ExportData(oBCP)
    wscript.Echo nRows & " rows exported from " & table.name
    end if
    next
    else
    oBCP.DataFilePath = wscript.Arguments(1) & ".csv" 
    nRows = oDatabase.Tables(wscript.arguments(1)).ExportData(oBCP)
    wscript.Echo nRows & " rows exported from " & wscript.arguments(1)
    end if
      

  19.   

    我把oBCP.ColumnDelimiter = vbComma
    oBCP.DataFileType = SQLDMODataFile_CommaDelimitedChar
    oBCP.ImportRowsPerBatch = 1000
    oBCP.MaximumErrorsBeforeAbort = 1
    oBCP.RowDelimiter = vbCrLf
    oBCP.ServerBCPDataFileType = SQLDMOBCPDataFile_Char这几行删掉ok了,说明这里参数设置不对,
    上一楼的代码可以了~  但是没有设置格式
      

  20.   

    我也发现这个问题了,把oBCP.DataFileType = SQLDMODataFile_CommaDelimitedChar
    注释就可以了,默认生成的是,分隔的
      

  21.   

    楼主结贴啊  hehe  :)
      

  22.   

    对刚才注释掉的做补充,改为
    oBCP.DataFileType = 3
    oBCP.ColumnDelimiter = "|"