Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 OpenRowSet имя файла- переменная  [new]
Bruin_Balu
Member

Откуда:
Сообщений: 112
Коллеги, поделитесь пожалуйста опытом.
Выполняю такой запрос:

DECLARE @FilePath nvarchar(150)
DECLARE @FileName nvarchar(150)
DECLARE @FileSheetName nvarchar(150)

SET @FilePath = (SELECT FilePath FROM Table1)
SET @FileName = 'test.xslx'
SET @FileSheetName = (SELECT FileSheetName FROM Table1)


DECLARE @SQL nvarchar(1000)
SET @SQL = 'select * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''File 12.0 Xml;Database='
+ @FilePath + '\' + @FileName + ';IMEX=1'',''SELECT * FROM ['+ @FileSheetName +']'')'

print @SQL
EXEC sp_executesql @SQL

- запрос выполняется.

Если переменную @FileName забирать из таблицы Table1:

DECLARE @FilePath nvarchar(150)
DECLARE @FileName nvarchar(150)
DECLARE @FileSheetName nvarchar(150)

SET @FilePath = (SELECT FilePath FROM Table1)
SET @FileName = (SELECT [FileName] FROM Table1)
SET @FileSheetName = (SELECT FileSheetName FROM Table1)


DECLARE @SQL nvarchar(1000)
SET @SQL = 'select * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''File 12.0 Xml;Database='
+ @FilePath + '\' + @FileName + ';IMEX=1'',''SELECT * FROM ['+ @FileSheetName +']'')'

print @SQL
EXEC sp_executesql @SQL

- то возникает ошибка
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Подскажите, как исправить?
5 ноя 09, 12:00    [7884719]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet имя файла- переменная  [new]
Glory
Member

Откуда:
Сообщений: 104760
Bruin_Balu

Подскажите, как исправить?

Сравнить тексты полученных запросов
5 ноя 09, 12:01    [7884729]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet имя файла- переменная  [new]
Bruin_Balu
Member

Откуда:
Сообщений: 112
Glory,
да вроде одинаковые...

CREATE TABLE [dbo].[Table1](
[FilePath] [nvarchar](150) NULL,
[FileName] [nvarchar](150) NULL,
[FileSheetName] [nvarchar](150) NULL
) ON [PRIMARY]

INSERT INTO [Test].[dbo].[Table1]
([FilePath]
,[FileName]
,[FileSheetName])
VALUES
('\\filepath', 'test.xlsx', 'Sheet1$')

select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','File 12.0 Xml;Database=\\filepath\test.xlsx;IMEX=1','SELECT * FROM [Sheet1$]')
select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','File 12.0 Xml;Database=\\filepath\test.xlsx;IMEX=1','SELECT * FROM [Sheet1$]')

Прошу прощения, в первом случае опечаталась: SET @FileName = 'test.xlsx'
5 ноя 09, 12:21    [7884941]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet имя файла- переменная  [new]
Glory
Member

Откуда:
Сообщений: 104760
Не могут две одинаковые команды работать по-разному
5 ноя 09, 12:24    [7884981]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet имя файла- переменная  [new]
Bruin_Balu
Member

Откуда:
Сообщений: 112
я с вами абсолютно согласна... Просто подумала, может есть какие-то подводные камни, если задавать аргументы через параметры, о которых я не знаю
5 ноя 09, 12:29    [7885037]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet имя файла- переменная  [new]
Glory
Member

Откуда:
Сообщений: 104760
Bruin_Balu
я с вами абсолютно согласна... Просто подумала, может есть какие-то подводные камни, если задавать аргументы через параметры, о которых я не знаю

Вы не задаете никаких параметров для OPENROWSET. Вы формируете одну строку с выполняемой командой. Серверу неприципиально конкатенировать ли симвлольные переменные или константы
5 ноя 09, 12:36    [7885109]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet имя файла- переменная  [new]
Bruin_Balu
Member

Откуда:
Сообщений: 112
спасибо вам Glory, сейчас на боевых данных еще раз проверю синтаксис
5 ноя 09, 12:45    [7885213]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet имя файла- переменная  [new]
Glory
Member

Откуда:
Сообщений: 104760
Bruin_Balu
спасибо вам Glory, сейчас на боевых данных еще раз проверю синтаксис

А как вы проверяете наличие и доступность файла, к которому будет обращаться OPENROWSET ?
5 ноя 09, 12:52    [7885278]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet имя файла- переменная  [new]
Bruin_Balu
Member

Откуда:
Сообщений: 112
пока проверяла только "опытным" путем. Создала папку с тестовым файлом с ограничением прав доступа - Full Control для администраторов сервера. Проверяю что файл не открыт, и запускаю запрос
5 ноя 09, 13:06    [7885411]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить