Текущий архив: 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.01 c