2010-04-26 85 views
0

我們有一個連接到SQL Server 2000數據庫的Access應用程序前端。我們希望能夠以編程方式將某些視圖的結果導出爲我們可以使用的任何格式(理想情況下爲Excel,但CSV /製表符分隔無誤)。到目前爲止,我們已經打開了F11,打開了視圖,然後點擊File-> Save As,但是我們開始得到超過16,000個結果的結果,這些結果無法導出。以編程方式在Access/SQL Server中導出視圖數據

我想要某種服務器端存儲過程,我們可以觸發這樣做。我知道sp_makewebtask過程是這樣做的,但它需要服務器上的管理權限,而且顯而易見的原因是我們無法將其提供給每個人。

任何想法?

+0

你有沒有考慮在這些線路上的東西:http://stackoverflow.com/questions/10812424/writing-copyfromrecordset-to-range/10814046#10814046 ?使用從SQL Server鏈接的表或視圖,您也可以使用各種傳輸選項,TransferSpreadsheet,Transfertext等。 – Fionnuala 2013-01-05 17:28:24

回答

0

如果你想要做的訪問,你可以查看鏈接作爲一個鏈接表,然後使用TransferSpreadsheet方法的一切,你可以導出「表」作爲一個CSV文件

編輯:

正如你要做到這一點的服務器端檢查此

http://www.mssqltips.com/tip.asp?tip=1633

我以前也使用過這一點,它的工作只是罰款

+0

我寧願在服務器端執行它,如果我可以... – 2010-04-26 13:57:05

+0

該鏈接的詳細信息似乎是對於SQL Server 2005,我嘗試了第一步,啓用了xp_cmdshell,並獲得了以下響應: 配置選項'show advanced options'從1更改爲1.運行RECONFIGURE語句進行安裝。 服務器:消息15123,級別16,狀態1,過程sp_configure,行79 配置選項'xp_cmdshell'不存在,或者它可能是高級選項。 有效的配置選項有: – 2010-04-26 16:10:29

0

您可能想看看SSIS - 它允許創建服務器端包來在服務器端導出數據。

另一種選擇是右鍵單擊數據庫,然後運行數據導出嚮導(下面使用SSIS)。

另一種選擇是創建命令行實用程序(SQLCMD)將數據導出到平面文件。

+0

SSIS似乎是在SQL Server 2000之後發佈的,對嗎?我僅限於SQL Server 2000。此外,BCP似乎沒有很好地處理換行記錄,所以我不認爲這是一個很好的選擇,要麼...... – 2010-04-26 16:23:43

+0

BCP不是SSIS。您可以使用DTS包(以前版本的SSIS) – IMHO 2010-04-26 16:54:14

+0

非常高興您使用DTS而不是SSIS。 :) – Praesagus 2010-04-26 23:01:07

0

你使用過VB還是宏?

  1. 創建本地表看起來像視圖結構
  2. 創建刪除該表
  3. 創建插入視圖的內容對本地表
  4. 使用查詢內容查詢在「分析與Excel」功能或內置出口的一個特點
  5. 創建宏(或VBA)運行前兩個qrys和一個單一的點擊
出口

我只是26K行嘗試過了,它的工作沒有問題

HTH

1

您可能無法給每個人的管理權限,但也許你可以:

  1. 創建一個特殊的用戶,例如'WebTaskUser',有權從所需的視圖中讀取 並執行sp_makewebtask存儲的 過程。你會授予一個用戶權限 - 而不是給每個人。

  2. 然後創建一個允許用戶執行的包裝存儲過程,同時包含對sp_makewebtask過程執行特定預定義調用的代碼,每個視圖只執行一次,僅爲該單個sp_makewebtask過程授予執行權限,到一個用戶帳戶 - 並非所有的管理權限都被授予 - 只能執行到一個帳戶:-)。

  3. 測試和優化存儲過程根據自己的喜好從SSMS, 訪問,VBA,或什麼最適合你

  4. 當你快樂與PROC,授出任何進一步的必要 權限用戶或用戶角色,因此他們可以將其作爲 好好執行。

`

--Example code to create user, and add permissions I might be able to add later 

USE [some_database_x]; 

CREATE PROCEDURE EXPORT_VIEWS_TO_EXCEL 
@TARGET_FOLDER NVARCHAR(100) DEFAULT 'C:\temp'; 
@FILE_TAG NVARCHAR(20) DEFAULT ''; 
@VIEWNAME NVARCHAR(100); 
WITH EXECUTE AS 'WebTaskUser' 
AS 
BEGIN 
IF @VIEWNAME IS NOT NULL 
BEGIN 
    DECLARE @myOUTPUTFILE NVARCHAR(100); 
    SET @myOUTPUTFILE = @TARGET_FOLDER + '\' + @VIEWNAME + COALESCE(@FILE_TAG,''); 
    DECLARE @myQUERY NVARCHAR(150); 
    IF @VIEWNAME = 'mydb.dbo.firstview' 
    BEGIN 
      SET @myQUERY = 'Select * from mydb.dbo.firstview', 
    END 
    IF @VIEWNAME = 'mydb.dbo.secondview' 
    BEGIN 
      SET @myQUERY = 'Select * from mydb.dbo.secondview' 
    END 
    EXECUTE sp_makewebtask 
    @outputfile = @OUTPUTFILE, 
    @query = @myQUERY, 
    @colheaders = 1, @FixedFont = 0, @lastupdated = 0, @resultstitle='My Title' 
END 

RETURN 0; 
END 
GO 

`