Экспортируйте данные представления программно в Access / SQL Server - PullRequest
0 голосов
/ 26 апреля 2010

У нас есть интерфейс приложения Access, подключенный к базе данных SQL Server 2000. Мы хотели бы иметь возможность программно экспортировать результаты некоторых представлений в любой формат, который мы можем (в идеале, Excel, но CSV / табуляция с разделителями - это хорошо). До сих пор мы просто нажимали F11, открывали представление и нажимали Файл-> Сохранить как, но мы начинаем получать результаты с более чем 16 000 результатов, которые нельзя экспортировать.

Я бы хотел какую-то хранимую процедуру на стороне сервера, которую мы можем запустить, которая сделает это. Мне известна процедура sp_makewebtask, которая делает это, однако требует административных прав на сервере, и по понятным причинам мы не можем дать это всем.

Есть идеи?

Ответы [ 4 ]

1 голос
/ 05 января 2013

Возможно, вы не сможете предоставить всем административные права, но, возможно, вы могли бы:

  1. Создать специального пользователя, например, 'WebTaskUser' с разрешениями на чтение из желаемых видов и выполнить хранимую процедуру sp_makewebtask процедура. Вы бы давали разрешения одному пользователю, а не каждому.

  2. Затем создайте хранимую процедуру-обертку (ниже), которая позволит вашим пользователям выполнять ее, в то время как она содержит код для выполнения определенных предопределенных вызовов процедуры sp_makewebtask, по одному на представление, предоставляя разрешения на выполнение только для этой единственной процедуры sp_makewebtask для одной учетной записи пользователя - не все административные разрешения предоставляются только для выполнения только одной учетной записи: -).

  3. Проверьте и доработайте хранимую процедуру по своему вкусу из SSMS, Access-vba, или что вам больше подходит

  4. Когда вы довольны проком, дайте любую дополнительную необходимую разрешения для ваших пользователей или пользовательских ролей, чтобы они могли выполнять его как хорошо.

`

--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

`

0 голосов
/ 26 апреля 2010

Возможно, вы захотите взглянуть на SSIS - он позволяет создавать пакеты на стороне сервера для экспорта данных на стороне сервера.

Другой вариант - щелкнуть правой кнопкой мыши базу данных и запустить мастер экспорта данных (который использует SSIS внизу).

Еще один вариант - создать утилиту командной строки (SQLCMD) для экспорта данных в плоский файл.

0 голосов
/ 27 апреля 2010

Вы использовали VB или макросы?

  1. Создайте локальную таблицу, похожую на структуру представления
  2. создать запрос, который удаляет содержимое таблицы
  3. создать запрос, который вставляет содержимое представления в локальную таблицу
  4. используйте функцию «анализ с помощью Excel» или одну из встроенных функций экспорта
  5. Создание макроса (или vba), который запускает первые два qrys и экспорт одним щелчком мыши

Я только что попробовал его с 26k строк, и он работал без проблем

НТН

0 голосов
/ 26 апреля 2010

Если вы хотите сделать все в доступе, вы можете связать представление как связанную таблицу, а затем, используя метод TransferSpreadsheet, вы можете экспортировать эту «таблицу» в виде CSV-файла

EDIT:

Как вы хотите сделать это на стороне сервера, проверьте это

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

Я использовал это раньше, и он работал просто отлично

...