相信大家常常會遇到將SqlServer查詢結果導出到Excel的問題如果導出的次數少直接“Save Results As”就是了;
准備好查詢語句
選擇數據庫啟動導入和導出向導
選擇數據源
選擇目標
後續步驟不再附圖一直點“下一步”按鈕就好
但是當要分別在每個表取樣那就相當麻煩了今天就為大家提供一個脫離office組件的可以將語句結果導出到Excel的過程希望會對大家有幫助!
導出到Excel
使用說明
執行時所連接的服務器決定文件存放在哪個服務器
遠程查詢語句中要加上數據庫名
ALTER PROC ExportFile
@QuerySql VARCHAR(max)
@Server VARCHAR()
@User VARCHAR()
@Password VARCHAR()
@FilePath NVARCHAR() = c:ExportFilexls
AS
DECLARE @tmp VARCHAR() = [##Table + CONVERT(VARCHAR()NEWID())+]
BEGIN TRY
DECLARE @Sql VARCHAR(max)@DataSource VARCHAR(max)=;
判斷是否為遠程服務器
IF @Server <> AND @Server <>
SET @DataSource = OPENDATASOURCE(SQLOLEDBData Source=+@Server+;User ID=+@User+;Password=+@Password+)
將結果集導出到指定的數據庫
SET @Sql = REPLACE(@QuerySql from into +@tmp+ from + @DataSource)
PRINT @Sql
EXEC(@Sql)
DECLARE @Columns VARCHAR(max) = @Data NVARCHAR(max)=
SELECT @Columns = @Columns + + name +獲取列名(xp_cmdshell導出文件沒有列名)
@Data = @Data + Convert(Nvarchar[ + name +])將結果集所在的字段更新為nvarchar(避免在列名和數據union的時候類型沖突)
FROM tempdbsyscolumns WHERE object_id = OBJECT_ID(tempdb+@tmp)
SELECT @Data = SELECT + SUBSTRING(@DataLEN(@Data)) + FROM + @tmp
SELECT @Columns = Select + SUBSTRING(@ColumnsLEN(@Columns))
使用xp_cmdshell的bcp命令將數據導出
EXEC sp_configure xp_cmdshell
RECONFIGURE
DECLARE @cmd NVARCHAR() = bcp " + @Columns+ Union All + @Data+" queryout + @FilePath + c T
PRINT @cmd
exec sysxp_cmdshell @cmd
EXEC sp_configure xp_cmdshell
RECONFIGURE
EXEC(DROP TABLE + @tmp)
END TRY
BEGIN CATCH
處理異常
IF OBJECT_ID(tempdb+@tmp) IS NOT NULL
EXEC(DROP TABLE + @tmp)
EXEC sp_configure xp_cmdshell
RECONFIGURE
SELECT ERROR_MESSAGE()
END CATCH
先不要著急使用該版本是基於xp_cmdshell的因為要創建文件所以要保證你的用戶能有文件管理的權限通常簡單點的方法就是將sql server的啟動用戶設置為本地系統用戶
好了現在我們來執行看看
查詢分析器連接哪個服務器文件就在哪個服務器上
本地導出
EXEC dboExportFile @QuerySql = select * from sysobjects varchar(max)
@Server = varchar()
@FilePath = Nc:objectsxls nvarchar()
遠程導出
EXEC dboExportFile @QuerySql = select * from mastersysobjects varchar(max)
@Server = varchar()
@User = sa varchar()
@Password = sa varchar()
@FilePath = Nc:objectsxls nvarchar()
執行結果如下顯示導出條數就沒有報錯再看看你的C盤多了個文件就大功告成了
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22304.html