konhon

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

          Google

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            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-10-17 02:43 konhon 優華 閱讀(431) 評論(0)  編輯  收藏 所屬分類: MS SQL Server
          主站蜘蛛池模板: 永春县| 阳山县| 伊春市| 丹阳市| 平乡县| 宿迁市| 阜阳市| 汝南县| 寿光市| 镇赉县| 大荔县| 林周县| 灵宝市| 蓝田县| 民县| 井陉县| 彭州市| 兴化市| 永福县| 新沂市| 渝北区| 读书| 肥城市| 比如县| 五常市| 阳信县| 濮阳市| 云霄县| 北流市| 凯里市| 正安县| 横山县| 大兴区| 凉山| 唐山市| 隆子县| 云浮市| 岢岚县| 南华县| 万年县| 唐山市|