[SQL] SQL导出为Excel表 →→→→→进入此内容的聊天室

来自 , 2020-10-28, 写在 SQL, 查看 117 次.
URL http://www.code666.cn/view/5c3a3b13
  1. Version: SQL Server 7.0/2000
  2. Created BY: Alexander Chigrik
  3. http://www.MSSQLCity.com/ - ALL about MS SQL
  4. (SQL Server Articles, FAQ, Scripts, Tips AND Test Exams).
  5.  
  6. This stored PROCEDURE can be used TO INSERT the RESULT SET OF the
  7. particular SELECT statement INTO Excel file (c:\ImportToExcel.xls,
  8. BY DEFAULT).
  9. You can pass the server name, USER name, USER password, the SELECT
  10. statement TO EXECUTE, AND the file name TO store the results SET,
  11. AS IN the example below:
  12.  
  13. EXEC ExportToExcel @server = '.',
  14.                    @uname = 'sa',
  15.                    @QueryText = 'SELECT au_fname FROM pubs..authors',
  16.                    @filename = 'c:\ImportToExcel.xls'
  17.  
  18. /*
  19. Version: SQL Server 7.0/2000
  20. Created by: Alexander Chigrik
  21. http://www.MSSQLCity.com/ - all about MS SQL
  22. (SQL Server Articles, FAQ, Scripts, Tips and Test Exams).
  23.  
  24. This stored procedure can be used to insert the result set of the
  25. particular select statement into Excel file (c:\ImportToExcel.xls,
  26. by default).
  27. You can pass the server name, user name, user password, the select
  28. statement to execute, and the file name to store the results set,
  29. as in the example below:
  30.  
  31. EXEC ExportToExcel @server = '.',
  32.                    @uname = 'sa',
  33.                    @QueryText = 'SELECT au_fname FROM pubs..authors',
  34.                    @filename = 'c:\ImportToExcel.xls'
  35. */
  36.  
  37. IF OBJECT_ID('ExportToExcel') IS NOT NULL DROP PROC ExportToExcel
  38. GO
  39.  
  40. CREATE PROCEDURE ExportToExcel (
  41.   @server sysname = NULL,
  42.   @uname sysname = NULL,
  43.   @pwd sysname = NULL,
  44.   @QueryText VARCHAR(200) = NULL,
  45.   @filename VARCHAR(200) = 'c:\ImportToExcel.xls'
  46. )
  47. AS
  48. DECLARE @SQLServer INT,
  49.         @QueryResults INT,
  50.         @CurrentResultSet INT,
  51.         @object INT,
  52.         @WorkBooks INT,
  53.         @WorkBook INT,
  54.         @Range INT,
  55.         @hr INT,
  56.         @COLUMNS INT,
  57.         @ROWS INT,
  58.         @indColumn INT,
  59.         @indRow INT,
  60.         @off_Column INT,
  61.         @off_Row INT,
  62.         @code_str VARCHAR(100),
  63.         @result_str VARCHAR(255)
  64.  
  65. IF @QueryText IS NULL
  66.   BEGIN
  67.     PRINT 'Set the query string'
  68.     RETURN
  69.   END
  70.  
  71. -- Sets the server to the local server
  72. IF @server IS NULL SELECT @server = @@servername
  73.  
  74. -- Sets the username to the current user name
  75. IF @uname IS NULL SELECT @uname = SYSTEM_USER
  76.  
  77. SET NOCOUNT ON
  78.  
  79. EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @SQLServer OUT
  80. IF @hr <> 0
  81. BEGIN
  82.     PRINT 'error create SQLDMO.SQLServer'
  83.     RETURN
  84. END
  85.  
  86. --  Connect to the SQL Server
  87. IF @pwd IS NULL
  88.   BEGIN
  89.     EXEC @hr = sp_OAMethod @SQLServer, 'Connect', NULL, @server, @uname
  90.     IF @hr <> 0
  91.        BEGIN
  92.          PRINT 'error Connect'
  93.          RETURN
  94.        END
  95.   END
  96. ELSE
  97.   BEGIN
  98.     EXEC @hr = sp_OAMethod @SQLServer, 'Connect', NULL, @server, @uname, @pwd
  99.     IF @hr <> 0
  100.       BEGIN
  101.         PRINT 'error Connect'
  102.         RETURN
  103.       END
  104.   END
  105.  
  106. SELECT @result_str = 'ExecuteWithResults("' + @QueryText + '")'
  107. EXEC @hr = sp_OAMethod @SQLServer, @result_str, @QueryResults OUT
  108. IF @hr <> 0
  109. BEGIN
  110.     PRINT 'error with method ExecuteWithResults'
  111.     RETURN
  112. END
  113.  
  114. EXEC @hr = sp_OAMethod @QueryResults, 'CurrentResultSet', @CurrentResultSet OUT
  115. IF @hr <> 0
  116. BEGIN
  117.     PRINT 'error get CurrentResultSet'
  118.     RETURN
  119. END
  120.  
  121. EXEC @hr = sp_OAMethod @QueryResults, 'Columns', @COLUMNS OUT
  122. IF @hr <> 0
  123. BEGIN
  124.     PRINT 'error get Columns'
  125.     RETURN
  126. END
  127.  
  128. EXEC @hr = sp_OAMethod @QueryResults, 'Rows', @ROWS OUT
  129. IF @hr <> 0
  130. BEGIN
  131.     PRINT 'error get Rows'
  132.     RETURN
  133. END
  134.  
  135. EXEC @hr = sp_OACreate 'Excel.Application', @object OUT
  136. IF @hr <> 0
  137. BEGIN
  138.     PRINT 'error create Excel.Application'
  139.     RETURN
  140. END
  141.  
  142. EXEC @hr = sp_OAGetProperty @object, 'WorkBooks', @WorkBooks OUT
  143. IF @hr <> 0
  144. BEGIN
  145.     PRINT 'error create WorkBooks'
  146.     RETURN
  147. END
  148.  
  149. EXEC @hr = sp_OAGetProperty @WorkBooks, 'Add', @WorkBook OUT
  150. IF @hr <> 0
  151. BEGIN
  152.     PRINT 'error with method Add'
  153.     RETURN
  154. END
  155.  
  156. EXEC @hr = sp_OAGetProperty @object, 'Range("A1")', @Range OUT
  157. IF @hr <> 0
  158. BEGIN
  159.     PRINT 'error create Range'
  160.     RETURN
  161. END
  162.  
  163. SELECT @indRow = 1
  164. SELECT @off_Row = 0
  165. SELECT @off_Column = 1
  166.  
  167. WHILE (@indRow <= @ROWS)
  168. BEGIN
  169. SELECT @indColumn = 1
  170.  
  171. WHILE (@indColumn <= @COLUMNS)
  172. BEGIN
  173.  
  174. EXEC @hr = sp_OAMethod @QueryResults, 'GetColumnString', @result_str OUT, @indRow, @indColumn
  175. IF @hr <> 0
  176. BEGIN
  177.     PRINT 'error get GetColumnString'
  178.     RETURN
  179. END
  180.  
  181. EXEC @hr = sp_OASetProperty @Range, 'value', @result_str
  182. IF @hr <> 0
  183. BEGIN
  184.     PRINT 'error set value'
  185.     RETURN
  186. END
  187.  
  188. EXEC @hr = sp_OAGetProperty @Range, 'Offset', @Range OUT, @off_Row, @off_Column
  189. IF @hr <> 0
  190. BEGIN
  191.     PRINT 'error get Offset'
  192.     RETURN
  193. END
  194.  
  195. SELECT @indColumn = @indColumn + 1
  196.  
  197. END
  198.  
  199. SELECT @indRow = @indRow + 1
  200. SELECT @code_str = 'Range("A' + LTRIM(str(@indRow)) + '")'
  201. EXEC @hr = sp_OAGetProperty @object, @code_str, @Range OUT
  202. IF @hr <> 0
  203. BEGIN
  204.     PRINT 'error create Range'
  205.     RETURN
  206. END
  207.  
  208. END
  209.  
  210. SELECT @result_str = 'exec master..xp_cmdshell ''del ' + @filename + ''', no_output'
  211. EXEC(@result_str)
  212. SELECT @result_str = 'SaveAs("' + @filename + '")'
  213. EXEC @hr = sp_OAMethod @WorkBook, @result_str
  214. IF @hr <> 0
  215. BEGIN
  216.     PRINT 'error with method SaveAs'
  217.     RETURN
  218. END
  219.  
  220. EXEC @hr = sp_OAMethod @WorkBook, 'Close'
  221. IF @hr <> 0
  222. BEGIN
  223.     PRINT 'error with method Close'
  224.     RETURN
  225. END
  226.  
  227. EXEC @hr = sp_OADestroy @object
  228. IF @hr <> 0
  229. BEGIN
  230.     PRINT 'error destroy Excel.Application'
  231.     RETURN
  232. END
  233.  
  234. EXEC @hr = sp_OADestroy @SQLServer
  235. IF @hr <> 0
  236. BEGIN
  237.     PRINT 'error destroy SQLDMO.SQLServer'
  238.     RETURN
  239. END
  240. GO
  241.  
  242. //SQL/1205

回复 "SQL导出为Excel表"

这儿你可以回复上面这条便签

captcha