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

Откуда:
Сообщений: 114
Существует задача загрузить содержимое текстового файла в одну строку таблицы с полем ntext(text) либо записать его содержимое в переменную чтобы потом вызвать из хранимой процедуры. Возможно ли это сделать средствамии T-SQL либо AxtiveX DTS. Буду признателен за помощь. Возможно кто-нибудь укажет где можно прочитать про это или укажет свой путь решения данной задачи
10 фев 05, 11:49    [1313000]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
appendchunk()
10 фев 05, 12:02    [1313069]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Существует задача загрузить содержимое текстового файла в одну строку таблицы с полем ntext(text)


С клиента без проблем: FAQ

автор
либо записать его содержимое в переменную чтобы потом вызвать из хранимой процедуры


А вот ни с переменной ни с параметром хп ничего не выйдет.
10 фев 05, 12:03    [1313073]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
ruslrain
Member

Откуда:
Сообщений: 114
Как я уже писал, надо использовать стандартные средства MS SQL. использование другой программы не рекомендуется. Поясню проблему. Стоит задача получить определенный набор данных из XML файла и загрузить его куда надо. естественно использую OpenXML

DECLARE @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, '...'
Select *  from OPEN XML ......
Вставлять текст XML файла было бы ... ну скажем так не очень корректно. так как задача стоит именно автоматизировать этот процесс. на мой взгляд наилучшим решением было бы получение XML текста из таблицы с полем ntext. Но вот как туда его записать стандартными средствами (DTS, ActiveX, T-SQL)? Предвидя возможные рекомендации хочу сразу заметить, что BulkLoad не подойдет в данной ситуации.
10 фев 05, 14:12    [1313478]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2423
на мой взгляд наилучшим решением было бы получение XML текста из таблицы с полем ntext
Хм...И как потом Вы собираетесь использовать sp_xml_preparedocument?
10 фев 05, 15:05    [1313642]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
FAQ
11 фев 05, 07:19    [1315104]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
Alexey Sh
Member

Откуда: SPB
Сообщений: 1930
2 tpg: вопрос остаётся, как скормить аргумент процедуре sp_xml_preparedocument?
11 фев 05, 11:54    [1315377]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
Alexey Sh
Member

Откуда: SPB
Сообщений: 1930
Ответ есть у Кена Хендерсона "Проф руководство по SQL Server: хранимые процедуры,XML,HTML" на стр 377 русского перевода
11 фев 05, 23:56    [1317209]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Alexey Sh
2 tpg: вопрос остаётся, как скормить аргумент процедуре sp_xml_preparedocument?
Как, как... из клиента, естественно.
14 фев 05, 08:00    [1318654]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
Alexey Sh
Member

Откуда: SPB
Сообщений: 1930
tpg
Alexey Sh
2 tpg: вопрос остаётся, как скормить аргумент процедуре sp_xml_preparedocument?
Как, как... из клиента, естественно.

А почему естествено? как я понял хочется из ХП действо произвести и скормить NTEXT хранящийся в таблице процедуре sp_xml_preparedocument
в книжке пример такой и нарисован, на прилагаемый диск - не попал :(
14 фев 05, 11:45    [1319186]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Alexey Sh
tpg
Alexey Sh
2 tpg: вопрос остаётся, как скормить аргумент процедуре sp_xml_preparedocument?
Как, как... из клиента, естественно.

А почему естествено? как я понял хочется из ХП действо произвести и скормить NTEXT хранящийся в таблице процедуре sp_xml_preparedocument
в книжке пример такой и нарисован, на прилагаемый диск - не попал :(

Хм...
Ну, а что мешает тогда вот так написать

exec MyProcForOpenXML (select ColOfNtext from tbl where id = <значение ID для строки>)
Естественно ХП MyProcForOpenXML должна иметь параметр типа NTEXT.
14 фев 05, 11:54    [1319213]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2423
tpg

...
Хм...
Ну, а что мешает тогда вот так написать

exec MyProcForOpenXML (select ColOfNtext from tbl where id = <значение ID для строки>)
Естественно ХП MyProcForOpenXML должна иметь параметр типа NTEXT.

use tempdb
if object_id('tbl') is not null drop table tbl
if object_id('MyProcForOpenXML') is not null drop proc MyProcForOpenXML
go
create table tbl(id int, ColOfNtext ntext)
go
create proc MyProcForOpenXML @ntext ntext
as
 select datalength(@ntext)
go
insert tbl values(1,N'some ntext...')
exec MyProcForOpenXML (select ColOfNtext from tbl where id = 1)
Server: Msg 201, Level 16, State 4, Procedure MyProcForOpenXML, Line 0
Procedure 'MyProcForOpenXML' expects parameter '@ntext', which was not supplied.

...хочется из ХП действо произвести и скормить NTEXT хранящийся в таблице процедуре sp_xml_preparedocument
На форуме встречались решения - динамический t-sql, либо 2-х уровневый, либо набор "ступенчатых по обрабатываемому размеру процедур" (т.е. с разным кол-вом строковых переменных, склеиваемых в exec-е), можно поискать по "sp_xml_preparedocument"...
Вот мой пример процедуры с 2-х уровневым t-sql proc xml_file2doc, где процедуре sp_xml_preparedocument скармливается текстовый файл (<650Кб)
А вот на другом сайте How can I parse XML from a text column using sp_xml_preparedocument?
14 фев 05, 12:42    [1319412]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
ruslrain
Member

Откуда:
Сообщений: 114
Всем большое спасибо за обсуждение и помощь. Пришлось "порыскать" по ресурсам MSDN. Проблема была решена. Как я говорил, задача была сделать все стандартными средствами MS SQL Server 2000.
Пришлось все делать через DTS ActiveX.
Делается в общем просто:
создаются два объекта
Scripting.FileSystemObject
ADODB.Connection
затем объявлятся тот самый файл. С ним если требуется делаются некоторые изменения, ну например замена " ' " на " ' ' " потом это все считывается в одну переменную. и затем уже создается запрос. Конечно это мало похоже на T-SQL, а больше на прикладное программирование в c использование ADO. Но раз сервер позволяет делать почему бы и нет. Жаль конечно что я смог решить задачу с использованием хранимой процедуры, но вот на этой ссылке
click me есть очень интересный вариант. Спасибо всем
17 фев 05, 17:26    [1329019]     Ответить | Цитировать Сообщить модератору
 Re: ntext (text) из файла  [new]
Serbat_Ivan
Member

Откуда: SQL.RU
Сообщений: 1603
ruslrain
Жаль конечно что я смог решить задачу с использованием хранимой процедуры, но вот на этой ссылке
click me есть очень интересный вариант. Спасибо всем

Вариант, конечно интересный, но для моего XML-я средненького размера пришлось бы объявлять так эдак 25-40 переменных типа @sql... Так как XML файл довольно посредственный (в плане размера) - могу предположить, что для загрузки файликов посерьёзней придётся объявлять по 100-200, а то и по несколько тысяч таких переменных, да ещё и ветвление в условиях их заполнения .... Короче смешной метод и на универсальность никак не тянет.
ИМХО (рылся 3 дня) в T-SQL-е нет нормальных механизмов для работы с XML. Придётся делать либо через клиента, либо извращаться с sp_OA..., что по сути является написанием клиента на серверной стороне.

Всё это ооооочень печально :(
29 июл 05, 15:31    [1748344]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить