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

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

成都创新互联公司是一家专注于成都网站建设、做网站与策划设计,拉孜网站建设哪家好?成都创新互联公司做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:拉孜等地区。拉孜做网站价格咨询:18980820575

在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,等)等,本人都有相应的处理办法。

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

分享题目:SybaseASE15中bcp实现有条件的导出表内数据
文章地址:http://www.shufengxianlan.com/qtweb/news45/248095.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联