konhon

          忘掉過去,展望未來。找回自我,超越自我。
          逃避不一定躲的過, 面對不一定最難過, 孤單不一定不快樂, 得到不一定能長久, 失去不一定不再擁有, 可能因為某個理由而傷心難過, 但我卻能找個理由讓自己快樂.

          Google

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks
           

          This stored procedure can be used to insert the result set of the
          particular select statement into Excel file (c:\ImportToExcel.xls,
          by default).
          You can pass the server name, user name, user password, the select
          statement to execute, and the file name to store the results set,
          as in the example below:

          EXEC ExportToExcel @server = '.',
                             @uname = 'sa',
                             @QueryText = 'SELECT au_fname FROM pubs..authors',
                             @filename = 'c:\ImportToExcel.xls'

          /*
          Version: SQL Server 7.0/2000
          Created by: Alexander Chigrik
          - all about MS SQL
          (SQL Server Articles, FAQ, Scripts, Tips and Test Exams).

          This stored procedure can be used to insert the result set of the
          particular select statement into Excel file (c:\ImportToExcel.xls,
          by default).
          You can pass the server name, user name, user password, the select
          statement to execute, and the file name to store the results set,
          as in the example below:

          EXEC ExportToExcel @server = '.',
                             @uname = 'sa',
                             @QueryText = 'SELECT au_fname FROM pubs..authors',
                             @filename = 'c:\ImportToExcel.xls'
          */

          IF OBJECT_ID('ExportToExcel') IS NOT NULL DROP PROC ExportToExcel
          GO

          CREATE PROCEDURE ExportToExcel (
            @server sysname = null,
            @uname sysname = null,
            @pwd sysname = null,
            @QueryText varchar(200) = null,
            @filename varchar(200) = 'c:\ImportToExcel.xls'
          )
          AS
          DECLARE @SQLServer int,
                  @QueryResults int,
                  @CurrentResultSet int,
                  @object int,
                  @WorkBooks int,
                  @WorkBook int,
                  @Range int,
                  @hr int,
                  @Columns int,
                  @Rows int,
                  @indColumn int,
                  @indRow int,
                  @off_Column int,
                  @off_Row int,
                  @code_str varchar(100),
                  @result_str varchar(255)

          IF @QueryText IS NULL 
            BEGIN
              PRINT 'Set the query string'
              RETURN
            END

          -- Sets the server to the local server
          IF @server IS NULL SELECT @server = @@servername

          -- Sets the username to the current user name
          IF @uname IS NULL SELECT @uname = SYSTEM_USER

          SET NOCOUNT ON

          EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @SQLServer OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error create SQLDMO.SQLServer'
              RETURN
          END

          --  Connect to the SQL Server
          IF @pwd IS NULL
            BEGIN
              EXEC @hr = sp_OAMethod @SQLServer, 'Connect', null, @server, @uname
              IF @hr <> 0
                 BEGIN
                   PRINT 'error Connect'
                   RETURN
                 END
            END
          ELSE
            BEGIN
              EXEC @hr = sp_OAMethod @SQLServer, 'Connect', null, @server, @uname, @pwd
              IF @hr <> 0
                BEGIN
                  PRINT 'error Connect'
                  RETURN
                END
            END

          SELECT @result_str = 'ExecuteWithResults("' + @QueryText + '")'
          EXEC @hr = sp_OAMethod @SQLServer, @result_str, @QueryResults OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error with method ExecuteWithResults'
              RETURN
          END

          EXEC @hr = sp_OAMethod @QueryResults, 'CurrentResultSet', @CurrentResultSet OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error get CurrentResultSet'
              RETURN
          END

          EXEC @hr = sp_OAMethod @QueryResults, 'Columns', @Columns OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error get Columns'
              RETURN
          END

          EXEC @hr = sp_OAMethod @QueryResults, 'Rows', @Rows OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error get Rows'
              RETURN
          END

          EXEC @hr = sp_OACreate 'Excel.Application', @object OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error create Excel.Application'
              RETURN
          END

          EXEC @hr = sp_OAGetProperty @object, 'WorkBooks', @WorkBooks OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error create WorkBooks'
              RETURN
          END

          EXEC @hr = sp_OAGetProperty @WorkBooks, 'Add', @WorkBook OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error with method Add'
              RETURN
          END

          EXEC @hr = sp_OAGetProperty @object, 'Range("A1")', @Range OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error create Range'
              RETURN
          END

          SELECT @indRow = 1
          SELECT @off_Row = 0
          SELECT @off_Column = 1

          WHILE (@indRow <= @Rows)
          BEGIN
          SELECT @indColumn = 1

          WHILE (@indColumn <= @Columns)
          BEGIN

          EXEC @hr = sp_OAMethod @QueryResults, 'GetColumnString', @result_str OUT, @indRow, @indColumn
          IF @hr <> 0
          BEGIN
              PRINT 'error get GetColumnString'
              RETURN
          END

          EXEC @hr = sp_OASetProperty @Range, 'value', @result_str
          IF @hr <> 0
          BEGIN
              PRINT 'error set value'
              RETURN
          END

          EXEC @hr = sp_OAGetProperty @Range, 'Offset', @Range OUT, @off_Row, @off_Column
          IF @hr <> 0
          BEGIN
              PRINT 'error get Offset'
              RETURN
          END

          SELECT @indColumn = @indColumn + 1

          END

          SELECT @indRow = @indRow + 1
          SELECT @code_str = 'Range("A' + LTRIM(str(@indRow)) + '")'
          EXEC @hr = sp_OAGetProperty @object, @code_str, @Range OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error create Range'
              RETURN
          END

          END

          SELECT @result_str = 'exec master..xp_cmdshell ''del ' + @filename + ''', no_output'
          EXEC(@result_str)
          SELECT @result_str = 'SaveAs("' + @filename + '")'
          EXEC @hr = sp_OAMethod @WorkBook, @result_str
          IF @hr <> 0
          BEGIN
              PRINT 'error with method SaveAs'
              RETURN
          END

          EXEC @hr = sp_OAMethod @WorkBook, 'Close'
          IF @hr <> 0
          BEGIN
              PRINT 'error with method Close'
              RETURN
          END

          EXEC @hr = sp_OADestroy @object
          IF @hr <> 0
          BEGIN
              PRINT 'error destroy Excel.Application'
              RETURN
          END

          EXEC @hr = sp_OADestroy @SQLServer
          IF @hr <> 0
          BEGIN
              PRINT 'error destroy SQLDMO.SQLServer'
              RETURN
          END
          GO

          posted on 2005-09-16 19:41 konhon 優(yōu)華 閱讀(751) 評論(0)  編輯  收藏 所屬分類: MS SQL Server
          主站蜘蛛池模板: 隆子县| 南川市| 苍山县| 大同县| 进贤县| 丽水市| 佛冈县| 容城县| 安塞县| 南充市| 焦作市| 汉沽区| 平谷区| 英德市| 顺义区| 沅江市| 班玛县| 福州市| 日土县| 南皮县| 汝州市| 盐边县| 都兰县| 贵南县| 达尔| 阳高县| 朝阳县| 兴安盟| 太仆寺旗| 青河县| 红河县| 黄梅县| 平乐县| 长岛县| 庆安县| 互助| 南雄市| 宜城市| 昌江| 陆川县| 娄烦县|