2010-04-26 95 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 

`