Sybase ASE15中bcp实现有条件的导出表内数据_其他_数据库_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 数据库 > 其他 > Sybase ASE15中bcp实现有条件的导出表内数据

Sybase ASE15中bcp实现有条件的导出表内数据

 2010/11/8 21:54:37    程序员俱乐部  我要评论(0)
  • 摘要:SybaseASE15.0之前的版本中利用bcp这个实用程序只能够导出整表或视图的数据。要想利用bcp有条件得导出表内数据,只能根据条件建立视图,然后再导出该视图的数据;或者根据条件建立临时表,再导出临时表的数据。但是,都必须在执行bcp命令之前到数据库内部去创建对象(视图或者临时表),然后再执行bcp命令导出视图或者临时表数据。显然,不是太方便。而其它的数据库管理系统,比如sqlserver早在sqlserver2000就实现了根据条件queryout数据的功能
  • 标签:SybaseASE15 导出表内数据

Sybase ASE15.0之前的版本中利用bcp这个实用程序只能够导出整表或视图的数据。要想利用bcp有条件得导出表内数据,只能根据条件建立视图,然后再导出该视图的数据;或者根据条件建立临时表,再导出临时表的数据。但是,都必须在执行bcp命令之前到数据库内部去创建对象(视图或者临时表),然后再执行bcp命令导出视图或者临时表数据。显然,不是太方便。而其它的数据库管理系统,比如sqlserver早在sqlserver2000就实现了根据条件queryout数据的功能。利用sybase ASE的第三方工具按条件导出数据也是一种办法。

专题:Sybase<a href=何处去?" width="550" onload="javascript:if(this.width>498)this.style.width=498;" onmousewheel="javascript:return big(this)" src="/Upload/Images/2010110821/B314842764E098E7.jpg" />

在Sybase ASE 15.0及以后版本中,sybase终于提供了按照条件导出表内数据的办法,虽然实现起来还稍微有一点点小麻烦,但是终究是有这个功能了。参数:--initstring 就是为实现这个功能而加的。

关于参数:--initstring的注意事项有:

1.  参数--initstring之后的SQL语句会在数据导出之前被发送到ASE引擎;

2.  参数--initstring之后的SQL语句被当做会话级别的SQL语句一样处理;

3.  参数--initstring之后的SQL语句在整个bcp导出数据会话期间始终有效;

4.  真正导出的数据是关键字bcp和out之间的表的数据,而不是参数--initstring中select列表的数据。

下面开始举几个例子:

bcp导出的是关键字bcp和out之间的表的数据,而不是--initstring中select列表的内容

bcp master..sysobjects out sysobjects.txt --initstring "select id,name,type from master..sysobjects where type='U' " -c -Usa -P -Stest

  1. C:\Documents and Settings\Administrator>bcp master..sysobjects out sysobjects.tx     
  2. t --initstring "select id,name,type from master..sysobjects where type='U' " -c     
  3. -Usa -P -Stest     
  4. Starting copy...     
  5. 163 rows copied.     
  6. Clock Time (ms.): total = 16  Avg = 0 (10187.50 rows per sec.)     
  7. C:\Documents and Settings\Administrator>more sysobjects.txt     
  8. sysobjects      1       1       S       0       97      1       0       229376     
  9. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0     
  10. 0       0       0       0       0       0                               1     
  11. 0000000000000000     
  12. sysindexes      2       1       S       0       97      0       0       229376     
  13. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0     
  14. 0       0       0       0       0       0                               1     
  15. 0000000000000000     
  16. syscolumns      3       1       S       0       97      0       0       229376     
  17. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0     
  18. 0       0       0       0       0       0                               1     
  19. 0000000000000000     
  20. systypes        4       1       S       0       97      1       0       229376     
  21. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0     
  22. 0       0       0       0       0       0                               1     
  23. 0000000000000000     
  24. syslogs 8       1       S       0       1       0       0       73728   Dec  2 2     
  25. 009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0       0     
  26. 0       0       0       0       0     
  27. syspartitions   28      1       S       0       97      2       0       229376     
  28. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0     
  29. 0       0       0       0       0       0                               1     
  30. 0000000000000000     
  31. sysgams 14      1       S       0       1       0       0       73728   Dec  2 2     
  32. 009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0       0     
  33. 0       0       0       0       0     
  34. systabstats     23      1       S       0       97      1       0       229888     
  35. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0     
  36. 0       0       0       0       0       0                               1     
  37. 0000000000000000     
  38. sysusages       31      1       S       0       97      2       0       229376     
  39. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0     
  40. 0       0       0       0       0       0                               1     
  41. 0000000000000000     
  42. sysdatabases    30      1       S       0       97      2       0       229376     
  43. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0     
  44. 0       0       0       0       0       0                               1     
  45. 0000000000000000     
  46. sysdevices      35      1       S       0       97      1       0       229376     
  47. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0     
  48. 0       0       0       0       0       0                               1     
  49. 0000000000000000     
  50. ^C     
  51. C:\Documents and Settings\Administrator>    
  52. C:\Documents and Settings\Administrator>bcp master..sysobjects out sysobjects.tx  
  53. t --initstring "select id,name,type from master..sysobjects where type='U' " -c  
  54. -Usa -P -Stest  
  55. Starting copy...  
  56. 163 rows copied.  
  57. Clock Time (ms.): total = 16  Avg = 0 (10187.50 rows per sec.)  
  58. C:\Documents and Settings\Administrator>more sysobjects.txt  
  59. sysobjects      1       1       S       0       97      1       0       229376  
  60. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0  
  61. 0       0       0       0       0       0                               1  
  62. 0000000000000000  
  63. sysindexes      2       1       S       0       97      0       0       229376  
  64. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0  
  65. 0       0       0       0       0       0                               1  
  66. 0000000000000000  
  67. syscolumns      3       1       S       0       97      0       0       229376  
  68. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0  
  69. 0       0       0       0       0       0                               1  
  70. 0000000000000000  
  71. systypes        4       1       S       0       97      1       0       229376  
  72. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0  
  73. 0       0       0       0       0       0                               1  
  74. 0000000000000000  
  75. syslogs 8       1       S       0       1       0       0       73728   Dec  2 2  
  76. 009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0       0  
  77. 0       0       0       0       0  
  78. syspartitions   28      1       S       0       97      2       0       229376  
  79. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0  
  80. 0       0       0       0       0       0                               1  
  81. 0000000000000000  
  82. sysgams 14      1       S       0       1       0       0       73728   Dec  2 2  
  83. 009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0       0  
  84. 0       0       0       0       0  
  85. systabstats     23      1       S       0       97      1       0       229888  
  86. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0  
  87. 0       0       0       0       0       0                               1  
  88. 0000000000000000  
  89. sysusages       31      1       S       0       97      2       0       229376  
  90. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0  
  91. 0       0       0       0       0       0                               1  
  92. 0000000000000000  
  93. sysdatabases    30      1       S       0       97      2       0       229376  
  94. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0  
  95. 0       0       0       0       0       0                               1  
  96. 0000000000000000  
  97. sysdevices      35      1       S       0       97      1       0       229376  
  98. Dec  2 2009  6:58:34:590PM      Dec  2 2009  6:58:34:590PM      0       0  
  99. 0       0       0       0       0       0                               1  
  100. 0000000000000000  
  101. ^C  
  102. C:\Documents and Settings\Administrator>  

上面的这个例子中,sql语句select id,name,type from master..sysobjects where type='U' 虽然被执行了, 但是并没有被反映到导出的结果中。

想导出sysobjects表中用户表的id和name两列数据,可以利用临时表和视图来实现。但是这和ase15以前版本中的临时表和视图还是不一样的。ase15之前版本中临时表或者视图是显示创建的,而在ase15及后续版本中可以利用隐式创建的临时表或者视图来实现根据条件导出数据的要求。

方法一: 利用隐式创建的临时表来由条件导出数据

要求是:导出sysobjects表中用户表的id和name两列数据。bcp命令语句如下:

  1. bcp #temptbl out sysobjects_id_name.txt 
  2. --initstring "select id,name into #temptbl 
  3. from sysobjects where type='U' order by name "  -c -Usa -P -Stest 

效果如下:
 

  1. C:\Documents and Settings\Administrator>bcp #temptbl out sysobjects_id_name.txt     
  2. --initstring "select id,name into #temptbl from sysobjects where type='U' order     
  3. by name "  -c -Usa -P -Stest     
  4. Starting copy...     
  5. 87 rows copied.     
  6. Clock Time (ms.): total = 16  Avg = 0 (5437.50 rows per sec.)     
  7. C:\Documents and Settings\Administrator>more sysobject_id_name.txt     
  8. 233048835       HP_PAGENO_RANGE     
  9. 1065051799      IVCMPLX     
  10. 553049975       IVCON     
  11. 601050146       IVCPROP     
  12. 425049519       IVONEROW     
  13. 793050830       IVPARAM     
  14. 377049348       IVSCHM     
  15. 457049633       IVSCON     
  16. 937051343       IVSHARE     
  17. 889051172       IVSPROC     
  18. 649050317       IVSPROP     
  19. 1033051685      IVSRVR     
  20. 505049804       IVSSYN     
  21. 985051514       IVSTAT     
  22. 841051001       IVSTR     
  23. 697050488       IVSVIEW     
  24. 745050659       IVVCOL     
  25. 121048436       errorlog     
  26. 1337052768      ijdbc_function_escapes     
  27. 1093575903      jdbc_function_escapes     
  28. 265048949       lzflzf     
  29. 21572084        monCachePool     
  30. 2137055618      monCachedObject     
  31. 533573908       monCachedProcedures     
  32. 725574592       monCachedStatement     
  33. 1753054250      monDataCache     
  34. 2041055276      monDeadLock     
  35. 117572426       monDeviceIO     
  36. 1721054136      monEngine     
  37. 1977055048      monErrorLog     
  38. 85572312        monIOQueue     
  39. 661574364       monLicense     
  40. 2009055162      monLocks     
  41. 1945054934      monNetworkIO     
  42. 1881054706      monOpenDatabases     
  43. 53572198        monOpenObjectActivity     
  44. 629574250       monOpenPartitionActivity     
  45. 757574706       monPCIBridge     
  46. 821574934       monPCIEngine     
  47. 789574820       monPCISlots     
  48. 1785054364      monProcedureCache     
  49. 1817054478      monProcedureCacheMemoryUsage     
  50. ^C     
  51. C:\Documents and Settings\Administrator>    
  52. C:\Documents and Settings\Administrator>bcp #temptbl out sysobjects_id_name.txt  
  53. --initstring "select id,name into #temptbl from sysobjects where type='U' order  
  54. by name "  -c -Usa -P -Stest  
  55. Starting copy...  
  56. 87 rows copied.  
  57. Clock Time (ms.): total = 16  Avg = 0 (5437.50 rows per sec.)  
  58. C:\Documents and Settings\Administrator>more sysobject_id_name.txt  
  59. 233048835       HP_PAGENO_RANGE  
  60. 1065051799      IVCMPLX  
  61. 553049975       IVCON  
  62. 601050146       IVCPROP  
  63. 425049519       IVONEROW  
  64. 793050830       IVPARAM  
  65. 377049348       IVSCHM  
  66. 457049633       IVSCON  
  67. 937051343       IVSHARE  
  68. 889051172       IVSPROC  
  69. 649050317       IVSPROP  
  70. 1033051685      IVSRVR  
  71. 505049804       IVSSYN  
  72. 985051514       IVSTAT  
  73. 841051001       IVSTR  
  74. 697050488       IVSVIEW  
  75. 745050659       IVVCOL  
  76. 121048436       errorlog  
  77. 1337052768      ijdbc_function_escapes  
  78. 1093575903      jdbc_function_escapes  
  79. 265048949       lzflzf  
  80. 21572084        monCachePool  
  81. 2137055618      monCachedObject  
  82. 533573908       monCachedProcedures  
  83. 725574592       monCachedStatement  
  84. 1753054250      monDataCache  
  85. 2041055276      monDeadLock  
  86. 117572426       monDeviceIO  
  87. 1721054136      monEngine  
  88. 1977055048      monErrorLog  
  89. 85572312        monIOQueue  
  90. 661574364       monLicense  
  91. 2009055162      monLocks  
  92. 1945054934      monNetworkIO  
  93. 1881054706      monOpenDatabases  
  94. 53572198        monOpenObjectActivity  
  95. 629574250       monOpenPartitionActivity  
  96. 757574706       monPCIBridge  
  97. 821574934       monPCIEngine  
  98. 789574820       monPCISlots  
  99. 1785054364      monProcedureCache  
  100. 1817054478      monProcedureCacheMemoryUsage  
  101. ^C  
  102. C:\Documents and Settings\Administrator> 

方法二: 利用隐式创建的视图来由条件导出数据

  1. bcp master..V_sysobjects_id_name out V_sysobjects_id_name.txt   
  2. --initstring " create view V_sysobjects_id_name as   
  3. select id,name from sysobjects where type='U' " -c -Usa -P -Stest 

效果如下:

  1. C:\Documents and Settings\Administrator>bcp master..V_sysobjects_id_name out V_s     
  2. ysobjects_id_name.txt --initstring " create view V_sysobjects_id_name as select     
  3. id,name from sysobjects where type='U'" -c -Usa -P -Stest     
  4. Starting copy...     
  5. 87 rows copied.     
  6. Clock Time (ms.): total = 16  Avg = 0 (5437.50 rows per sec.)     
  7. C:\Documents and Settings\Administrator>more V_sysobjects_id_name.txt     
  8. 1097051913      spt_values     
  9. 1129052027      spt_monitor     
  10. 1177052198      spt_limit_types     
  11. 1088003876      syblicenseslog     
  12. 1225052369      spt_ijdbc_table_types     
  13. 1257052483      spt_ijdbc_mda     
  14. 1305052654      spt_ijdbc_conversion     
  15. 1337052768      ijdbc_function_escapes     
  16. 1593053680      monTables     
  17. 1625053794      monTableParameters     
  18. 1657053908      monTableColumns     
  19. 1689054022      monState     
  20. 1721054136      monEngine     
  21. 1753054250      monDataCache     
  22. 1785054364      monProcedureCache     
  23. 1817054478      monProcedureCacheMemoryUsage     
  24. 1849054592      monProcedureCacheModuleUsage     
  25. 1881054706      monOpenDatabases     
  26. 1913054820      monSysWorkerThread     
  27. 1945054934      monNetworkIO     
  28. 1977055048      monErrorLog     
  29. 2009055162      monLocks     
  30. 2041055276      monDeadLock     
  31. 2073055390      monWaitClassInfo     
  32. 2105055504      monWaitEventInfo     
  33. 2137055618      monCachedObject     
  34. 21572084        monCachePool     
  35. 53572198        monOpenObjectActivity     
  36. 85572312        monIOQueue     
  37. 117572426       monDeviceIO     
  38. 149572540       monSysWaits     
  39. 181572654       monProcess     
  40. 213572768       monProcessLookup     
  41. 245572882       monProcessActivity     
  42. 277572996       monProcessWorkerThread     
  43. 309573110       monProcessNetIO     
  44. 341573224       monProcessObject     
  45. 373573338       monProcessWaits     
  46. 405573452       monProcessStatement     
  47. 437573566       monSysStatement     
  48. 469573680       monProcessSQLText     
  49. 501573794       monSysSQLText     
  50. ^C     
  51. C:\Documents and Settings\Administrator>    
  52. C:\Documents and Settings\Administrator>bcp master..V_sysobjects_id_name out V_s  
  53. ysobjects_id_name.txt --initstring " create view V_sysobjects_id_name as select  
  54. id,name from sysobjects where type='U'" -c -Usa -P -Stest  
  55. Starting copy...  
  56. 87 rows copied.  
  57. Clock Time (ms.): total = 16  Avg = 0 (5437.50 rows per sec.)  
  58. C:\Documents and Settings\Administrator>more V_sysobjects_id_name.txt  
  59. 1097051913      spt_values  
  60. 1129052027      spt_monitor  
  61. 1177052198      spt_limit_types  
  62. 1088003876      syblicenseslog  
  63. 1225052369      spt_ijdbc_table_types  
  64. 1257052483      spt_ijdbc_mda  
  65. 1305052654      spt_ijdbc_conversion  
  66. 1337052768      ijdbc_function_escapes  
  67. 1593053680      monTables  
  68. 1625053794      monTableParameters  
  69. 1657053908      monTableColumns  
  70. 1689054022      monState  
  71. 1721054136      monEngine  
  72. 1753054250      monDataCache  
  73. 1785054364      monProcedureCache  
  74. 1817054478      monProcedureCacheMemoryUsage  
  75. 1849054592      monProcedureCacheModuleUsage  
  76. 1881054706      monOpenDatabases  
  77. 1913054820      monSysWorkerThread  
  78. 1945054934      monNetworkIO  
  79. 1977055048      monErrorLog  
  80. 2009055162      monLocks  
  81. 2041055276      monDeadLock  
  82. 2073055390      monWaitClassInfo  
  83. 2105055504      monWaitEventInfo  
  84. 2137055618      monCachedObject  
  85. 21572084        monCachePool  
  86. 53572198        monOpenObjectActivity  
  87. 85572312        monIOQueue  
  88. 117572426       monDeviceIO  
  89. 149572540       monSysWaits  
  90. 181572654       monProcess  
  91. 213572768       monProcessLookup  
  92. 245572882       monProcessActivity  
  93. 277572996       monProcessWorkerThread  
  94. 309573110       monProcessNetIO  
  95. 341573224       monProcessObject  
  96. 373573338       monProcessWaits  
  97. 405573452       monProcessStatement  
  98. 437573566       monSysStatement  
  99. 469573680       monProcessSQLText  
  100. 501573794       monSysSQLText  
  101. ^C  
  102. C:\Documents and Settings\Administrator> 

在--initstring中的sql语句中创建了视图V_sysobjects_id_name。 我们来看看bcp导出数据完成后,该视图V_sysobjects_id_name还存在否?

  1. 1> use master     
  2. 2> go     
  3. 1> select name from sysobjects where name='V_sysobjects_id_name'    
  4. 2> go     
  5.  name     
  6.  -------------------------------------------------------------------------------     
  7. --------------------------------------------------------------------------------     
  8. --------------------------------------------------------------------------------     
  9. ----------------     
  10.  V_sysobjects_id_name     
  11. (1 row affected)     
  12. 1>    
  13. 1> use master  
  14. 2> go  
  15. 1> select name from sysobjects where name='V_sysobjects_id_name' 
  16. 2> go  
  17.  name  
  18.  -------------------------------------------------------------------------------  
  19. --------------------------------------------------------------------------------  
  20. --------------------------------------------------------------------------------  
  21. ----------------  
  22.  V_sysobjects_id_name  
  23. (1 row affected)  
  24. 1> 

视图V_sysobjects_id_name仍然是存在的。此种方法和ase12.x中利用显示创建的视图导出数据的方法比较类似,只不过稍微简便些罢了。

总结一下:

1.  ase15.0及后续版本中实现了根据条件导出表的数据,这点很值得庆幸。

2.  此bcp导出的不是参数--initstring中sql语句的结果,而仍然是关键字bcp和out之间的表的数据。

3.  增加的参数--initstring实际上就是实现了能够利用bcp工具向ASE引擎发送sql命令而已。

4.  参数--initstring中的sql语句在导出数据整个会话期间有效。所以,导出--initstring中创建的临时表是可能的。

5.  归根结底,bcp增加的这个新特性,仅仅是能够通过bcp向ase引擎发送sql命令罢了。

作者简介:andkylee,5年Sybase管理、维护经验。现任职于北京一IT运维管理公司,Sybase DBA。熟悉Sybase的安装、配置、调优、监控与排错,尤其精通Sybase数据库的灾难恢复。自己深入研究Sybase数据库的内部物理存储结构,开发了能够从Sybase数据库设备文件中提取数据的工具;还编写了一个能够分析Sybase日志文件内容,反解析出相应SQL语句的程序。可以提供Sybase数据库非常规恢复技术支持。Sybase非常规数据库恢复包括:设备文件故障(如:页面逻辑损坏,页面物理损坏等,605、692错误等等),误操作(包括:误更新update,误删除drop table,误清空数据truncate table,等)等,本人都有相应的处理办法。

原文标题: ASE15中bcp可以实现有条件的导出表内数据了

链接:http://blog.csdn.net/andkylee/archive/2010/07/11/5726694.aspx

发表评论
用户名: 匿名