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

Откуда:
Сообщений: 22
Добрый день! Не проходите мимо помогите, кто сталкивался, плизз
есть процедура необходимо ее доработать в качестве входной переменной сделать путь к файлу (запихнуть C:\Users\Documents\1.xml в переменную)

create PROCEDURE [dbo].[OPENXML]
AS
BEGIN
SELECT * into #T FROM
OPENROWSET(Bulk 'C:\Users\Documents\1.xml',SINGLE_CLOB)

....
14 янв 21, 15:47    [22263353]     Ответить | Цитировать Сообщить модератору
 Re: Путь в качестве переменной  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Qiwi1,

временную таблицу нужно будет создавать заранее или использовать постоянную/глобальную временную.
Запрос заполнения таблицы из OPENROWSET записываете в переменную @sql_str типа nvarchar(max).
Затем выполняете запрос через EXEC (@str_str)
14 янв 21, 15:59    [22263359]     Ответить | Цитировать Сообщить модератору
 Re: Путь в качестве переменной  [new]
Владислав Колосов
Member

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

обычно делают наоборот - пишут скрипт или приложение, которые загружает документы на сервер.
15 янв 21, 02:46    [22263654]     Ответить | Цитировать Сообщить модератору
 Re: Путь в качестве переменной  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Владислав Колосов,

обычно, я отвечаю на вопрос ТС, так как причин выбрать необычное решение - множество.
15 янв 21, 09:35    [22263692]     Ответить | Цитировать Сообщить модератору
 Re: Путь в качестве переменной  [new]
Qiwi1
Member

Откуда:
Сообщений: 22
ptr128,
Пишу
...
declare @FileName nvarchar(255) ;
set @FileName = 'C:\Users\Documents\1.xml';
declare @DOC nvarchar(max);
DECLARE @hdoc int;
SET @DOC=(select * from(SELECT * FROM OPENROWSET(BULK '''+@FileName+''', SINGLE_CLOB) ));



-----------------далее уже работаю с файлом----------------------------------
EXEC sp_xml_preparedocument @hdoc OUTPUT, @DOC;
--------------------------------
SELECT id,name
FROM OPENXML (@hdoc, 'root/items/item',2)
WITH (id int ,
name Varchar(255) );

EXEC sp_xml_removedocument @hdoc;
...


Ругается "Корреляционное имя должно быть указано для группового набора строк в предложении FROM."
В чем ошибка?
15 янв 21, 10:04    [22263716]     Ответить | Цитировать Сообщить модератору
 Re: Путь в качестве переменной  [new]
Qiwi1
Member

Откуда:
Сообщений: 22
И еще вопрос:
Загружаемый hml файл содержит первую строку
<?xml version="1.0" encoding="UTF-8"?>

как ее удалить не вручную?
15 янв 21, 11:12    [22263754]     Ответить | Цитировать Сообщить модератору
 Re: Путь в качестве переменной  [new]
Qiwi1
Member

Откуда:
Сообщений: 22
ptr128
Qiwi1,

временную таблицу нужно будет создавать заранее или использовать постоянную/глобальную временную.
Запрос заполнения таблицы из OPENROWSET записываете в переменную @sql_str типа nvarchar(max).
Затем выполняете запрос через EXEC (@str_str)


Вот так наконец-то получилось, спасибо!
...
declare @FileName nvarchar(255) ;
set @FileName = 'C:\Users\1.xml';
declare @DOC nvarchar(max);
DECLARE @hdoc int;
CREATE TABLE #BulkImport (BulkColumn nvarchar(max))
--Загружаем файл в xml переменную
exec ('Insert into #BulkImport SELECT * FROM OPENROWSET(BULK '''+@FileName+''', SINGLE_CLOB) AS x ')
SET @DOC=(select BulkColumn from #BulkImport)

EXEC sp_xml_preparedocument @hdoc OUTPUT, @DOC;
---------------------работаю с xml-----------

SELECT id,name
FROM OPENXML (@hdoc, 'root/ss/s',2)----?
WITH (id int ,
name Varchar(255) );

EXEC sp_xml_removedocument @hdoc;
...


Теперь еще одну проблему решить не могу-убрать из xml декларацию (<?xml version="1.0" encoding="UTF-8"?>)
пока убираю ее вручную, но это не вариант, тк файлов много. Как это сделать, кто знает подскажите, пожалуйста!

Сообщение было отредактировано: 15 янв 21, 16:06
15 янв 21, 16:10    [22263990]     Ответить | Цитировать Сообщить модератору
 Re: Путь в качестве переменной  [new]
Konst_One
Member

Откуда:
Сообщений: 11568
обычный REPLACE не предлагать?
15 янв 21, 16:51    [22264049]     Ответить | Цитировать Сообщить модератору
 Re: Путь в качестве переменной  [new]
aleks222
Member

Откуда:
Сообщений: 1240
Konst_One
обычный REPLACE не предлагать?

Нафига козе баян?
substring достаточно.
15 янв 21, 17:01    [22264059]     Ответить | Цитировать Сообщить модератору
 Re: Путь в качестве переменной  [new]
Qiwi1
Member

Откуда:
Сообщений: 22
aleks222,
попробую, спасибо!
15 янв 21, 17:45    [22264091]     Ответить | Цитировать Сообщить модератору
 Re: Путь в качестве переменной  [new]
Qiwi1
Member

Откуда:
Сообщений: 22
Получилось, спасибо за подсказку!
15 янв 21, 18:09    [22264100]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить