Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 346
Добрый вечер, товарищи!

Возникла проблема:

необходимо выгрузить целиком все данные из таблицы в файл excel.
Без использования SSIS (у некоторых клиентов стоят бесплатные версии SEL Server - там не работает SSIS).

Как выгружать данные в уже готовый файл типа .xls уже нашёл.

Осталось понять, возможно ли написать запрос, который создал бы такой файл.
(Создал бы файл .xls, в нём создал бы лист с заданным именем и добавил необходимые названия в первую строку).

У кого какие мысли есть, возможно ли это?)
2 июн 12, 22:02    [12656664]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Можно сразу в XML SpreadSheet формате выгрузить.
А можно и через OLE помудохаться.
Можно конечно и в новейших форматах, но уже как-то лень.
3 июн 12, 00:26    [12656926]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
AndreTM
Member

Откуда: Где-то в вологодских лесах...
Сообщений: 6902
Кстати, ни в другой теме 12656458, ни здесь я не понял - а почему действия выполняются сервером? Если разговор идёт о "клиентах"...
Либо один сервер создаёт файл Excel своими средствами, а затем отдаёт этот файл клиентам как файл. Либо "клиенты" которым нужны данные в Excel - этим самым Экзелем подключаются и делают запрос через тот же ADODB, например.
3 июн 12, 01:19    [12657035]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 346
Сейчас всё это премя пытался сделать черех хранимую CLR-процедуру,
но в ней используется Microsoft.Office.Interop.Excel - это категорически не даёт создать сборку, даже с подписями основной dll

Грубо говоря, моя хранимая процедура получилась в dll, она в свою очередь использует Microsoft.Office.Interop.Excel

На что ругается:
Assembly 'Microsoft.Office.Interop.Excel' could not be installed because existing policy would keep it from being used.

Даже при создании таким образом:
CREATE ASSEMBLY CreateExcelFile from 'd:\CreateExcelFile.dll' WITH PERMISSION_SET = UNSAFE

Это вообще беда.
3 июн 12, 02:18    [12657098]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 346
Не подскажите, вот эта чудестная функция: https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=713044&msg=7958157

создаёт ли новый экселевский файл, и если да, то где?
3 июн 12, 02:35    [12657111]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 346
Уважаемый Mnior,
не могли бы Вы поделиться наброском генератора экселевских файлов?
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=713044&msg=7947523
:)
3 июн 12, 02:40    [12657114]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Aleksey V.P.
Member

Откуда: Москва
Сообщений: 575
Александр Бердышев,

Вот тебе ещё, правда в MS Word, но разберёшься как на Excel переделать.

Экспорт данных из SQL Server в Word
3 июн 12, 12:16    [12657396]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Александр Бердышев
Не подскажите, вот эта функция создаёт ли новый экселевский файл, и если да, то где?
Она генерируем XML формата SpreadSheet. Вам только останется сохранить его в файл. Если бы вы прочитали бы тему до конца то увидели как это сделать.
3 июн 12, 22:36    [12659002]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 346
Вопрос решён:
1. Ставим драйвер на 2010 офис.

Потом:
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[proc_CreateExcelFile]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[proc_CreateExcelFile]
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO


CREATE           PROCEDURE [dbo].[proc_CreateExcelFile]
	@toFile nvarchar(2000),
	@Table nvarchar(50),
	@ColumnsString nvarchar(4000) = ''
AS

SET NOCOUNT ON
BEGIN
DECLARE @COLUMNS nvarchar(4000)
DECLARE @TRUE_COLUMNS nvarchar(4000)
DECLARE @ColumnName nvarchar(100)
DECLARE @Count int-- Какой по счёту столбец пишем
SET @TRUE_COLUMNS = ''


IF (ISNULL(@ColumnsString, '') = '')OR(@ColumnsString = '*')
	BEGIN
	SELECT @COLUMNS = ISNULL(@COLUMNS+ ',','') + COLUMN_NAME 
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE TABLE_NAME = @Table --AND ORDINAL_POSITION > 1
	END
ELSE
	BEGIN
	SET @COLUMNS = REPLACE(@ColumnsString, ' ', '')
	END


SET @COLUMNS = @COLUMNS + ','
SET @Count = 1
/*В @TRUE_COLUMNS записываем через запятую только те столбцы, которые есть в таблице*/
WHILE LEN(@COLUMNS) > 1
	BEGIN
	SET @ColumnName = SUBSTRING(@COLUMNS, 1, PATINDEX('%,%',@COLUMNS) - 1)
	IF @ColumnName IN (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @Table)
		BEGIN
		SET @TRUE_COLUMNS = @TRUE_COLUMNS + @ColumnName + ','
		END
	SET @COLUMNS = SUBSTRING(@COLUMNS, PATINDEX('%,%',@COLUMNS) + 1, LEN(@COLUMNS))
	SET @Count = @Count + 1
	IF @Count > 150
		BEGIN
		break
		END
	END

/*В этой строке хранятся те столбцы, которые надо записать в Excel и которые есть в заявленной таблице*/
SET @TRUE_COLUMNS = SUBSTRING(@TRUE_COLUMNS, 1, LEN(@TRUE_COLUMNS)-1)



/**************************************Дальше идёт запись в файл**************************************/

DECLARE @desc varchar(255) -- Описание ошибки
Declare @ExlValue varchar(100) -- this variable holds the value that should be assigned to Excel cell
Declare @ObjProp varchar(100) -- holds the full description of the property
DECLARE @WordObject int, @RetCode int, @Document int , @Filename varchar(255)

EXEC @RetCode = sp_OACreate 'Excel.Application', @WordObject OUTPUT, 4
IF @RetCode <> 0 or @@Error <> 0 GOTO OLE_Error_Handler


EXEC @RetCode = sp_OAMethod @WordObject, 'Workbooks.Add', @Document OUTPUT 
IF @RetCode <> 0 or @@Error <> 0 GOTO OLE_Error_Handler

SET @Filename = @toFile--'d:\success.xls'
DECLARE @ExecString varchar(255)
SET @ExecString = 'del /f /q '+ @Filename
EXEC master..xp_cmdshell @ExecString

SET @Count = 1
SET @COLUMNS = @TRUE_COLUMNS + ','
WHILE LEN(@COLUMNS) > 1
	BEGIN
	SET @ColumnName = SUBSTRING(@COLUMNS, 1, PATINDEX('%,%',@COLUMNS) - 1)

	set @ObjProp='Application.ActiveWorkbook.Sheets(1).Cells(1, ' + cast(@Count as varchar(4)) + ').value'
	EXEC @RetCode = sp_OASetProperty @WordObject, @ObjProp, @ColumnName
	SET @COLUMNS = SUBSTRING(@COLUMNS, PATINDEX('%,%',@COLUMNS) + 1, LEN(@COLUMNS))
	SET @Count = @Count + 1
	IF @Count > 150 
		BEGIN
		Break
		END
	END




EXEC @RetCode = sp_OAMethod @WordObject,'Application.ActiveWorkbook.SaveAs',Null, @Filename
IF @RetCode <> 0 or @@Error <> 0 GOTO OLE_Error_Handler
print 3
EXEC @RetCode = sp_OAMethod @WordObject, 'Quit'
print 4
EXEC sp_OADestroy @WordObject
GOTO Done
OLE_Error_Handler:
EXEC sp_oageterrorinfo @WordObject, @RetCode out, @desc out
select @retCode, @desc
--EXEC @RetCode = sp_OAMethod @WordObject, 'Quit'
--EXEC sp_OADestroy @WordObject
GOTO Done
Done:
--EXEC sp_OAStop
END

Потом:
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[proc_ExtractDataToExcelFile]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[proc_ExtractDataToExcelFile]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO


CREATE           PROCEDURE [dbo].[proc_ExtractDataToExcelFile]
	@toFile nvarchar(2000),
	@Table nvarchar(50),
	@ColumnsString nvarchar(4000) = ''
AS
BEGIN
DECLARE @COLUMNS nvarchar(4000)
DECLARE @TRUE_COLUMNS nvarchar(4000)
DECLARE @ExecString nvarchar(4000)
DECLARE @ColumnName nvarchar(100)
DECLARE @Count int-- Какой по счёту столбец пишем
SET @TRUE_COLUMNS = ''

/*Создаём файл*/
BEGIN TRY
	EXEC dbo.proc_CreateExcelFile @toFile, @Table, @ColumnsString
	END TRY
BEGIN CATCH
	print 'Ошибка создания файла Excel'
	RAISERROR( 'Ошибка создания файла Excel!',16,1)
    RETURN
END CATCH

/*Получаем названия столбцов*/
IF (ISNULL(@ColumnsString, '') = '')OR(@ColumnsString = '*')
	BEGIN
	SELECT @COLUMNS = ISNULL(@COLUMNS+ ',','') + COLUMN_NAME 
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE TABLE_NAME = @Table --AND ORDINAL_POSITION > 1
	END
ELSE
	BEGIN
	SET @COLUMNS = REPLACE(@ColumnsString, ' ', '')
	END


SET @COLUMNS = @COLUMNS + ','
SET @Count = 1
/*В @TRUE_COLUMNS записываем через запятую только те столбцы, которые есть в таблице*/
WHILE LEN(@COLUMNS) > 1
	BEGIN
	SET @ColumnName = SUBSTRING(@COLUMNS, 1, PATINDEX('%,%',@COLUMNS) - 1)
	IF @ColumnName IN (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @Table)
		BEGIN
		SET @TRUE_COLUMNS = @TRUE_COLUMNS + @ColumnName + ','
		END
	SET @COLUMNS = SUBSTRING(@COLUMNS, PATINDEX('%,%',@COLUMNS) + 1, LEN(@COLUMNS))
	SET @Count = @Count + 1
	IF @Count > 150
		BEGIN
		break
		END
	END
/*В этой строке хранятся те столбцы, которые надо записать в Excel и которые есть в заявленной таблице*/
SET @TRUE_COLUMNS = SUBSTRING(@TRUE_COLUMNS, 1, LEN(@TRUE_COLUMNS)-1)

/*Пишем в файл*/
BEGIN TRY
	SET @ExecString = 'insert into OpenDataSource( ''Microsoft.ACE.OLEDB.12.0'',
	  ''Data Source="' + @toFile + '";Extended properties="Excel 12.0;HDR=Yes"'')...Лист1$
	(' + @TRUE_COLUMNS + ')
	select ' + @TRUE_COLUMNS + ' from ' + @Table
	EXEC sp_executesql @ExecString
END TRY
BEGIN CATCH
	print 'Ошибка записи данных в файл Excel'
	RAISERROR( 'Ошибка записи данных в файл Excel',16,1)
    RETURN
END CATCH

END


Потом запускать вот так:
EXEC proc_ExtractDataToExcelFile 'd:\SUCCESS.xlsx', 'Контейнер_Услуги_Счета',
'ID,ID_ГТД,ololo'

Или вот так:
EXEC proc_ExtractDataToExcelFile 'd:\SUCCESS.xlsx', 'Контейнер_Услуги_Счета'

Если 3-м параметром задаём столбцы, то выводит только эти стобцы из таблицы.
Если не задаём 3-й параметр - то все поля таблицы.

Если задаёте поля, которые вывести, то писать их через запятую, можно с пробелами, можно без (все пробелы будут удалены)
Если вы введёте ошибочное название поля, которого нет в таблице - то оно будет просто игнорироваться.

EXEC proc_ExtractDataToExcelFile 'd:\SUCCESS.xlsx', 'Контейнер_Услуги_Счета',
'*'

- тоже вывод всех полей таблицы.

Спасибо всем, кто помог решить данную проблему.
Если возникнут проблемы с правами, то вот тема:
https://www.sql.ru/forum/actualthread.aspx?tid=946516
7 июн 12, 17:55    [12683864]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 346
Родился скрипт даже ещё лучше:
(Создаёт файлы xls, xlsx в нормальном формате).
USE [super]
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[proc_CreateExcelFile]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[proc_CreateExcelFile]
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO


CREATE           PROCEDURE [dbo].[proc_CreateExcelFile]
	@toFile nvarchar(2000),
	@Table nvarchar(50),
	@ColumnsString nvarchar(4000) = ''
AS

SET NOCOUNT ON
BEGIN
DECLARE @COLUMNS nvarchar(4000)
DECLARE @TRUE_COLUMNS nvarchar(4000)
DECLARE @ColumnName nvarchar(100)
DECLARE @Count int-- Какой по счёту столбец пишем
SET @TRUE_COLUMNS = ''


IF (ISNULL(@ColumnsString, '') = '')OR(@ColumnsString = '*')
	BEGIN
	SELECT @COLUMNS = ISNULL(@COLUMNS+ ',','') + COLUMN_NAME 
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE TABLE_NAME = @Table --AND ORDINAL_POSITION > 1
	END
ELSE
	BEGIN
	SET @COLUMNS = REPLACE(@ColumnsString, ' ', '')
	END


SET @COLUMNS = @COLUMNS + ','
SET @Count = 1
/*В @TRUE_COLUMNS записываем через запятую только те столбцы, которые есть в таблице*/
WHILE LEN(@COLUMNS) > 1
	BEGIN
	SET @ColumnName = SUBSTRING(@COLUMNS, 1, PATINDEX('%,%',@COLUMNS) - 1)
	IF @ColumnName IN (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @Table)
		BEGIN
		SET @TRUE_COLUMNS = @TRUE_COLUMNS + @ColumnName + ','
		END
	SET @COLUMNS = SUBSTRING(@COLUMNS, PATINDEX('%,%',@COLUMNS) + 1, LEN(@COLUMNS))
	SET @Count = @Count + 1
	IF @Count > 150
		BEGIN
		break
		END
	END

/*В этой строке хранятся те столбцы, которые надо записать в Excel и которые есть в заявленной таблице*/
SET @TRUE_COLUMNS = SUBSTRING(@TRUE_COLUMNS, 1, LEN(@TRUE_COLUMNS)-1)



/**************************************Дальше идёт запись в файл**************************************/

DECLARE @desc varchar(255) -- Описание ошибки
Declare @ExlValue varchar(100) -- this variable holds the value that should be assigned to Excel cell
Declare @ObjProp varchar(100) -- holds the full description of the property
DECLARE @WordObject int, @RetCode int, @Document int , @Filename varchar(255)

EXEC @RetCode = sp_OACreate 'Excel.Application', @WordObject OUTPUT, 4
IF @RetCode <> 0 or @@Error <> 0 GOTO OLE_Error_Handler


EXEC @RetCode = sp_OAMethod @WordObject, 'Workbooks.Add', @Document OUTPUT 
IF @RetCode <> 0 or @@Error <> 0 GOTO OLE_Error_Handler

SET @Filename = @toFile--'d:\success.xls'
DECLARE @ExecString varchar(255)
SET @ExecString = 'del /f /q '+ @Filename
EXEC master..xp_cmdshell @ExecString

SET @Count = 1
SET @COLUMNS = @TRUE_COLUMNS + ','
WHILE LEN(@COLUMNS) > 1
	BEGIN
	SET @ColumnName = SUBSTRING(@COLUMNS, 1, PATINDEX('%,%',@COLUMNS) - 1)

	set @ObjProp='Application.ActiveWorkbook.Sheets(1).Cells(1, ' + cast(@Count as varchar(4)) + ').value'
	EXEC @RetCode = sp_OASetProperty @WordObject, @ObjProp, @ColumnName
	SET @COLUMNS = SUBSTRING(@COLUMNS, PATINDEX('%,%',@COLUMNS) + 1, LEN(@COLUMNS))
	SET @Count = @Count + 1
	IF @Count > 150 
		BEGIN
		Break
		END
	END


DECLARE @FileType int
SET @FileType = 56		/*По умолчанию - .xls*/
IF SUBSTRING(@Filename, LEN(@Filename) - 3, 4) = '.xls'
	BEGIN
	SET @FileType = 56
	END

IF SUBSTRING(@Filename, LEN(@Filename) - 3, 4) = 'xlsx'
	BEGIN
	SET @FileType = 51
	END

IF SUBSTRING(@Filename, LEN(@Filename) - 3, 4) = 'xlsm'
	BEGIN
	SET @FileType = 52
	END
	
IF SUBSTRING(@Filename, LEN(@Filename) - 3, 4) = 'xlsb'
	BEGIN
	SET @FileType = 50
	END
	
/*http://www.rondebruin.nl/saveas.htm*/

EXEC @RetCode = sp_OAMethod @WordObject,'Application.ActiveWorkbook.SaveAs',Null, @Filename, @FileType
IF @RetCode <> 0 or @@Error <> 0 GOTO OLE_Error_Handler
print 3
EXEC @RetCode = sp_OAMethod @WordObject, 'Quit'
print 4
EXEC sp_OADestroy @WordObject
GOTO Done
OLE_Error_Handler:
EXEC sp_oageterrorinfo @WordObject, @RetCode out, @desc out
select @retCode, @desc
--EXEC @RetCode = sp_OAMethod @WordObject, 'Quit'
--EXEC sp_OADestroy @WordObject
GOTO Done
Done:
--EXEC sp_OAStop
END
7 июн 12, 18:23    [12683988]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
sql_padavan
Member

Откуда:
Сообщений: 22
Александр Бердышев,
А эти скрипты универсальны или их нужно переделывать под себя?"
28 май 13, 14:49    [14359646]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 346
sql_padavan
Александр Бердышев,
А эти скрипты универсальны или их нужно переделывать под себя?"

Они достаточно универсальны:
EXEC proc_ExtractDataToExcelFile 'd:\SUCCESS.xlsx', 'Контейнер_Услуги_Счета','ID,ID_ГТД,ololo'

2-м параметром можно писать имя любой таблицы, которая есть в БД.
22 окт 13, 16:12    [15015765]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
fumitox
Member

Откуда:
Сообщений: 36
У меня так

Процедура создания файла XLSX:
CREATE procedure [dbo].[spCreateXLSX] (@Path varchar (255))
 as
SET NOCOUNT ON
DECLARE @Conn int, @hr int, @Connect varchar(255), @Table varchar(8000)

SET @Connect = 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source='+@Path+';Extended Properties=Excel 12.0 Xml'
SET @Table = 'CREATE TABLE Лист1 (Бренд nvarchar, Артикул nvarchar, Наименование nvarchar, [Кол-во] int, [Цена рублей] money)'

EXEC @hr = sp_OACreate 'ADODB.Connection', @Conn OUT               
EXEC @hr = sp_OASetProperty @Conn, 'ConnectionString', @Connect    
EXEC @hr = sp_OAMethod @Conn, 'Open'                              
EXEC @hr = sp_OAMethod @Conn, 'Execute', NULL, @Table , NULL, 129   
EXEC @hr = sp_OADestroy @Conn


Вставка в него данных из таблицы:
 
exec spCreateXLSX 'C:\Temp.xlsx'
go
 
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\Temp.xlsx;', 
'SELECT Бренд , Артикул , Наименование , [Кол-во] , [Цена рублей] FROM [Лист1$]')

select firm, number, descr, qty, price from pricelist
go
17 дек 16, 13:18    [20015603]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
пробую описанные выше две процедурки proc_ExtractDataToExcelFile и proc_CreateExcelFile.

....	SET @ExecString = 'insert into OpenDataSource( ''Microsoft.ACE.OLEDB.12.0'',
''Data Source="' + @toFile + '";Extended properties="Excel 12.0;HDR=Yes"'')...Лист1$
(' + @TRUE_COLUMNS + ')
select ' + @TRUE_COLUMNS + ' from ' + @Table
EXEC sp_executesql @ExecString....
а на
exec proc_ExtractDataToExcelFile 'd:\success.xlsx', 'table1'

ругается
OLE DB provider 'Microsoft.ACE.OLEDB.12.0' could not INSERT INTO table '[Microsoft.ACE.OLEDB.12.0]'. Unknown provider error.
[OLE/DB provider returned message: Недопустимая закладка.]

но при этом, одну запись из таблицы table1 в файл экселя всё же добавляет.
В чем может быть прикол?
20 июн 17, 11:26    [20576838]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
Версий нет? (((
20 июн 17, 14:52    [20577671]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
user89
Member

Откуда:
Сообщений: 2083
descent52,

в начале топика вроде нормальный вариант через SpreadSheet...
Если в Excel будет только 1 лист, то можно в формате HTML, а сохранить на диске через bcp 14987073
20 июн 17, 18:10    [20578325]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7771
descent52,

у Вас такой спорт - выпить стакан чая без рук? Про MS VBA что-нибудь слышали?
20 июн 17, 18:20    [20578348]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
AndreTM
Кстати, ни в другой теме 12656458, ни здесь я не понял - а почему действия выполняются сервером? Если разговор идёт о "клиентах"...
Либо один сервер создаёт файл Excel своими средствами, а затем отдаёт этот файл клиентам как файл. Либо "клиенты" которым нужны данные в Excel - этим самым Экзелем подключаются и делают запрос через тот же ADODB, например.
20 июн 17, 18:22    [20578355]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Rankatan
Member

Откуда:
Сообщений: 250
descent52
ругается
OLE DB provider 'Microsoft.ACE.OLEDB.12.0' could not INSERT INTO table '[Microsoft.ACE.OLEDB.12.0]'. Unknown provider error.
[OLE/DB provider returned message: Недопустимая закладка.]

https://habrahabr.ru/post/219415/
20 июн 17, 18:23    [20578360]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
Владислав Колосов, не нужен мне MS VBA!!!

Rankatan,
у меня офис 2010, win7, Sql2000 - все 32-битное. Вашу ссылку я уже вчера штудировал

select *
 FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
'Data Source=d:\success.xls;Extended Properties=EXCEL 12.0')...[Лист1$] ;


выдает содержимое файла d:\success.xls, тут порядок!

А вот хочется именно структуру и содержимое таблицы из SQL2000 выдать в эксель, а где лопата - не пойму
20 июн 17, 19:36    [20578530]     Ответить | Цитировать Сообщить модератору
 Re: Создание .xls файла средставми MS SQL Server 2005. Без использования SSIS  [new]
Irina5
Member

Откуда:
Сообщений: 1
fumitox,
Добрый день! Странно, но выполнение кода
EXEC @hr = sp_OAMethod @Conn, 'Execute', NULL, @Table , NULL, 129
вызывает ошибку
(строк обработано: 1)
Сообщение 0, уровень 11, состояние 0, строка 0
При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы.
При этом файл создается, с ним можно работать. С чем это может быть связано? И что обозначает параметр 129? С уважением. Ирина.
27 июл 17, 12:05    [20679253]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить