Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.10;
Скачать: CL | DM;

Вниз

MSSQL: READTEXT в локальную переменную   Найти похожие ветки 

 
Ihor Osov'yak   (2003-01-22 16:29) [0]

сабж, собственно.

Сейчас делаю это через временную табличку, примерно так:

INSERT INTO #chars(chars)
EXEC sp_executesql N"READTEXT ##text.mText @textptr @countRead 1",
N"@textptr varbinary(16), @countRead int",
@textptr,
@countRead


select @smallStr = chars from #chars


Есть ли более "цивилизированные" методы решения?

Зы - я собственно вбизи от mssql только третий день, так что не обессудьте ...


 
asmith   (2003-01-22 17:29) [1]

USE pubs
DECLARE @textpointer varbinary(16)
SELECT @textpointer = TEXTPTR(pr_info) FROM pub_info
READTEXT pub_info.pr_info @textpointer 1 25


 
asmith   (2003-01-22 17:36) [2]

Сорри, это не то! ИМНО в локальную переменную нельзя.


 
Ihor Osov'yak   (2003-01-22 17:50) [3]

2 asmith (22.01.03 17:36)

Ну блин, достал этот MSSQL. В IB если чего и нельзя, но очень хочется, то или поискал чужую UDF, или написал свою ... На том же делфи...

А задача в общем-то простая, елементарный парсинг... В хранимую процедуру передается параметр типа text (плоский ansi текст, может быть большим, до нескольких мегабайт), нужно разбить на строчки, и рассовать по разным табличкам в зависимости от вида строчек...
А уже день парюсь, ничего более умного чем мазохизм с двумя временными табличками + READTEXT по одному символу на ум не приходит

ЗЫ - Сорри за эмоции, накипело...
Зы2 - делать прослойку типа сервера бизнес-логики не предлагать, заказчик парсинг хочет на сервере...




 
asmith   (2003-01-22 18:44) [4]

А почему чтение по одному символу? И какой критерий разбиения? В смысле чем строки должны заканчиваться.


 
Ihor Osov'yak   (2003-01-22 19:21) [5]


2 asmith (22.01.03 18:44)

> А почему чтение по одному символу? -
Тут я пожалуй не прав, можно читать в строку-буффер, наверно так и сделаю.

А строчки оканчиваются тем, чем положено для plain ansi text - 0x0D,0x0A..



 
asmith   (2003-01-22 19:59) [6]

Рискну предложить такой вариант:
1. передавать в процедуру полное имя файла со строками, лежащего где-то на сетевой шаре
2. в процедуре через ХП sp_OACreate создать объект типа FileSystemObject, читать ним файл построчно
3. каждую строку обрабатівать, как нужно.
Можно также попробовать функцией CHARINDEX (не уверен, что она умеет работать с text) искать 0x0D,0x0A, выделять строки и совать в локальную в процедуре переменную типа table.


 
Ihor Osov'yak   (2003-01-22 20:55) [7]

2 asmith (22.01.03 19:59)

> 1. передавать в процедуру полное имя файла со строками, лежащего где-то на сетевой шаре

Такое не идет, хотя бы что тот text, что идет к XP получается на клиенте через сокет и не хотелось бы его ложить на шару. Ибо шары для конкретной инстанции клиента может и не быть в принцыпе.

Но вот
> в процедуре через ХП sp_OACreate
немного заинтересовало. Если я правильно понял, я могу на сервере в XП создать инстанцию OLE object, в т.ч. написаного мною, и подчунуть ему тот же text.. Пусть эта инстанция OLE object и парсит этот гребанный текст... Я прав? И если я прав, то где можно почитать про то, какие интерфейсы я должен предоставлять своим OLE object, чтобы скормить его серверу, и самое главное - как передать этот text (справедливости отмечу, что инфы о написании UDF для IB - тьма... С кучей наработок с исходными текстами - и делфийскими, и сишными)...


 
Alex Konshin   (2003-01-24 08:03) [8]

Ты можешь сам написать XP на Delphi.
Смотри пример SQLAlert на моем сайте
http://home.earthlink.net/~akonshin/index.htm



Страницы: 1 вся ветка

Текущий архив: 2003.02.10;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.009 c
3-28689
Ag2002
2003-01-24 15:10
2003.02.10
Знак минус


3-28633
Darrin
2003-01-23 13:18
2003.02.10
Как поиметь доступ к запароленной базе Access2000 через ADO?


4-29171
Maxim___
2002-12-26 10:16
2003.02.10
mY Punto Switcher


1-28723
Ihtiandr
2003-01-31 17:25
2003.02.10
Минимальный размер формы


1-28707
DiXO
2003-01-31 14:57
2003.02.10
Быстрый поиск по DBGridу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский