powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как прочитать текстовый файл в @переменную T-SQL ???
11 сообщений из 11, страница 1 из 1
Как прочитать текстовый файл в @переменную T-SQL ???
    #32060948
_slawa_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу применить OpenXML, чтобы загрузить длиннющий XML-файл (в память не знаю - влезет он или нет) в таблицу SQL - но не пойму как прочитать просто текстовый файл в переменную. (Про sp_xml_preparedocument - знаю.)
Даже не надо по HTTP, мне бы хотя-бы прочитать файл локально (т.е. даже пусть даже этот XML-файл лежит на сервере)?
Помогите, кто знает, плии-из ... MailTo:Slawa@starnet.ru
...
Рейтинг: 0 / 0
Как прочитать текстовый файл в @переменную T-SQL ???
    #32060956
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно так:

insert into @table exec sp_cmd( 'type <file-name>' )
...
Рейтинг: 0 / 0
Как прочитать текстовый файл в @переменную T-SQL ???
    #32060967
_slawa_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет
/*insert into @table exec sp_cmd( 'type <file-name>' )*/
идея хорошая.
Но, во-первых, у меня нет этой процедуры, и как бы, все, что мне известно о защите, всяких там маркерах доступа и прочее, противоречит возможности существования такой процедуры. В MSDN я поискал - там такой процедуры тоже нет.
Может это просто какая-то хакерская технология. Мы ведь быстро привыкаем к тому, чем пользуемся часто и уже ничему не удивляемся.
Во-вторых, я почему-то совершенно не уверен, что поток STDOUT от команды TYPE попадет не на экран CMD.EXE (или command.com), а в переменную @Table. Жаль нет этой процедуры и проверить не могу.
...
Рейтинг: 0 / 0
Как прочитать текстовый файл в @переменную T-SQL ???
    #32060972
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это стандартный метод!!!
Я просто ошибся >>>
xp_cmdshell
...
Рейтинг: 0 / 0
Как прочитать текстовый файл в @переменную T-SQL ???
    #32060973
Фотография timda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Slawa@starnet.ru

дарова Новокосинцам от Реутовчан )))
...
Рейтинг: 0 / 0
Как прочитать текстовый файл в @переменную T-SQL ???
    #32060981
_slawa_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасиба за xp_cmdshell - она есть и работает нормально.
Я ее только что проверил. Что плохо - надо права администратора сервера и только в контесте базы MASTER. Это кстати ответ на хакерские технологии и прочие заморочки защиты.
Однако пока до конца не получилось:
/*exec xp_cmdshell 'type c:\XML_for_SQL\Template\shablon_xsl_exe.xml'*/ выдает ответ только в виде OUTPUT-файла нормально, причем по признаку CRLF почему-то даже разбивает XML-файл на записи.
Но вот так /*declare @str nchar(1000)
set @str =
exec xp_cmdshell 'type c:\XML_for_SQL\Template\shablon_xsl_exe.xml'*/ пишет Incorrect syntax near the keyword 'exec'.
А вот так /*declare @str nchar(1000)
insert into @str
exec xp_cmdshell 'type c:\XML_for_SQL\Template\shablon_xsl_exe.xml'
*/ пишет Must declare the variable '@str'.
Проблема видимо в том, что xp_cmdshell может выдавать в переменные SQL только свой код возврата: 0 или 1.
Попробую поковырять дальше. Но уже теплее...
...
Рейтинг: 0 / 0
Как прочитать текстовый файл в @переменную T-SQL ???
    #32061127
_slawa_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то если кому-то интересно, то эта задача была решена так:
конечно с помощью
Insert into pubs..tab1 exec master..xp_cmdshell "type имя_файла"
вставить можно ТОЛЬКО В ТАБЛИЦУ, но никак не в переменную. Кроме того, никак не получается побороть проблемы с кодировкой - кодовую страницу Windows 1251 не понимает никак
Поэтому если говорить о вставке текстового файла в таблицу - то прекрасно работает
bulk insert pubs..c2 from [c:\sites\1c.xml] with ( CODEPAGE = 1251 , rowterminator ='>')
или тупой импорт визардом DTS (кстати он позволяет добавить поле Identity, что не позволяет BULK - и введенные из файла строки УЖЕ НИКОГДА НЕ ПЕРЕМЕШАЮТСЯ)
Но в моем случае проблем дальше еще больше - тот XML файл, который я читаю - значительно больше 4000 байт - и как его загрузить в OPENXML - я пока не понял.
Если не смогу - то придется констатировать, что встроенный язык T-SQL - просто ГАВНО, т.к. даже не позволяет загрузить в MS SQL обычный XML-файл больше 4000 байт.
Тогда остается только ADO - но это уже другая история.
Ну еще можно разделить с помощью Xpath сам XML-файл на части по 4000 байт, а потом собирать по отдельным ребрам графа - но это писать и отлаживать столько, что проще уволиться и уйти на другую работу.
...
Рейтинг: 0 / 0
Как прочитать текстовый файл в @переменную T-SQL ???
    #32061158
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тебе более правильный, но и более длинный способ:

Создаешь ODBC DSN с Microsoft Text Driver(*.txt) -
он будет рассматривать все файлы в указанной директории как таблицы

Далее, бобавляешь этот DNS в MSSQL как Linked Server
-> sp_addlinkedserver ( DNS_name )
, а дальше почитаешь в описании этой процедуры!
Если что, пиши
...
Рейтинг: 0 / 0
Как прочитать текстовый файл в @переменную T-SQL ???
    #32061160
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T-SQL - ГАВНО так-же как и все языки. На С, например, нельзя сделать INNER JOIN.
А на T-SQL нельзя работать с типами text/ntext/image (точнее, можно делать очень немногое).
И ещё на T-SQL нельзя работать с файлами и с Ethernet - картой через регистры.

Читайте документацию и творите!
...
Рейтинг: 0 / 0
Как прочитать текстовый файл в @переменную T-SQL ???
    #32061219
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в русском языке нет даже left outer join... Правда, есть left outer going...
...
Рейтинг: 0 / 0
Как прочитать текстовый файл в @переменную T-SQL ???
    #32061283
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2_slawa_
То, чего вы хотите добится решается следующим образом
- создатеся хранимая процедура с входным параметром ntext, которая применяется к этому параметру функцию OPENXML
- создается клиентское приложение, которое открывает нужный файл и передает его содержимое в хранимую процедуру.

Все.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как прочитать текстовый файл в @переменную T-SQL ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]