|
|
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
Хочу применить OpenXML, чтобы загрузить длиннющий XML-файл (в память не знаю - влезет он или нет) в таблицу SQL - но не пойму как прочитать просто текстовый файл в переменную. (Про sp_xml_preparedocument - знаю.) Даже не надо по HTTP, мне бы хотя-бы прочитать файл локально (т.е. даже пусть даже этот XML-файл лежит на сервере)? Помогите, кто знает, плии-из ... MailTo:Slawa@starnet.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2002, 19:27:14 |
|
||
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
Можно так: insert into @table exec sp_cmd( 'type <file-name>' ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2002, 19:47:36 |
|
||
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
Насчет /*insert into @table exec sp_cmd( 'type <file-name>' )*/ идея хорошая. Но, во-первых, у меня нет этой процедуры, и как бы, все, что мне известно о защите, всяких там маркерах доступа и прочее, противоречит возможности существования такой процедуры. В MSDN я поискал - там такой процедуры тоже нет. Может это просто какая-то хакерская технология. Мы ведь быстро привыкаем к тому, чем пользуемся часто и уже ничему не удивляемся. Во-вторых, я почему-то совершенно не уверен, что поток STDOUT от команды TYPE попадет не на экран CMD.EXE (или command.com), а в переменную @Table. Жаль нет этой процедуры и проверить не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2002, 20:40:32 |
|
||
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
Это стандартный метод!!! Я просто ошибся >>> xp_cmdshell ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2002, 20:59:27 |
|
||
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2002, 21:05:06 |
|
||
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
Спасиба за 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. Попробую поковырять дальше. Но уже теплее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2002, 21:54:53 |
|
||
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
Вообще-то если кому-то интересно, то эта задача была решена так: конечно с помощью 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 байт, а потом собирать по отдельным ребрам графа - но это писать и отлаживать столько, что проще уволиться и уйти на другую работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2002, 12:37:07 |
|
||
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
Вот тебе более правильный, но и более длинный способ: Создаешь ODBC DSN с Microsoft Text Driver(*.txt) - он будет рассматривать все файлы в указанной директории как таблицы Далее, бобавляешь этот DNS в MSSQL как Linked Server -> sp_addlinkedserver ( DNS_name ) , а дальше почитаешь в описании этой процедуры! Если что, пиши ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2002, 13:02:29 |
|
||
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
T-SQL - ГАВНО так-же как и все языки. На С, например, нельзя сделать INNER JOIN. А на T-SQL нельзя работать с типами text/ntext/image (точнее, можно делать очень немногое). И ещё на T-SQL нельзя работать с файлами и с Ethernet - картой через регистры. Читайте документацию и творите! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2002, 13:07:00 |
|
||
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
Кстати, в русском языке нет даже left outer join... Правда, есть left outer going... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2002, 14:22:41 |
|
||
|
Как прочитать текстовый файл в @переменную T-SQL ???
|
|||
|---|---|---|---|
|
#18+
2_slawa_ То, чего вы хотите добится решается следующим образом - создатеся хранимая процедура с входным параметром ntext, которая применяется к этому параметру функцию OPENXML - создается клиентское приложение, которое открывает нужный файл и передает его содержимое в хранимую процедуру. Все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2002, 15:36:38 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32060981&tid=1819375]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 306ms |

| 0 / 0 |
