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-09-16 19:41 konhon 優華 閱讀(755) 評論(0)  編輯  收藏 所屬分類: MS SQL Server
          主站蜘蛛池模板: 木里| 达尔| 四平市| 兴义市| 山阳县| 内黄县| 凉城县| 嘉祥县| 得荣县| 津南区| 桦甸市| 睢宁县| 鹿邑县| 隆回县| 福泉市| 梁平县| 定陶县| 建始县| 长丰县| 北宁市| 盘锦市| 娱乐| 石河子市| 元江| 紫金县| 厦门市| 湖口县| 阳城县| 华坪县| 于都县| 天气| 吴江市| 那曲县| 沙河市| 梁平县| 青铜峡市| 永新县| 神农架林区| 洛阳市| 西平县| 东乡族自治县|