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 優華 閱讀(751) 評論(0)  編輯  收藏 所屬分類: MS SQL Server
          主站蜘蛛池模板: 瑞丽市| 神农架林区| 鹤山市| 合江县| 正镶白旗| 扎鲁特旗| 东辽县| 浙江省| 泸溪县| 太白县| 九龙坡区| 四子王旗| 阿拉善左旗| 卓资县| 沾化县| 磐石市| 潞西市| 泗水县| 奉贤区| 静海县| 临沧市| 南陵县| 合阳县| 吉林市| 佛冈县| 徐州市| 城口县| 北辰区| 金华市| 白水县| 乌拉特后旗| 汉源县| 南康市| 洞口县| 澜沧| 勃利县| 牡丹江市| 安达市| 浮山县| 麻阳| 关岭|