![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MSSQL: READTEXT в локальную переменную
Ihor Osov'yak © (2003-01-22 16:29:00)сабж, собственно.
Сейчас делаю это через временную табличку, примерно так:
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 только третий день, так что не обессудьте ...
Alex Konshin (2003-01-24 08:03:00) [1]Ты можешь сам написать XP на Delphi.
Смотри пример SQLAlert на моем сайте
http://home.earthlink.net/~akonshin/index.htm
Ihor Osov'yak (2003-01-22 20:55:00) [2]2 asmith (22.01.03 19:59)
> 1. передавать в процедуру полное имя файла со строками, лежащего где-то на сетевой шаре
Такое не идет, хотя бы что тот text, что идет к XP получается на клиенте через сокет и не хотелось бы его ложить на шару. Ибо шары для конкретной инстанции клиента может и не быть в принцыпе.
Но вот
> в процедуре через ХП sp_OACreate
немного заинтересовало. Если я правильно понял, я могу на сервере в XП создать инстанцию OLE object, в т.ч. написаного мною, и подчунуть ему тот же text.. Пусть эта инстанция OLE object и парсит этот гребанный текст... Я прав? И если я прав, то где можно почитать про то, какие интерфейсы я должен предоставлять своим OLE object, чтобы скормить его серверу, и самое главное - как передать этот text (справедливости отмечу, что инфы о написании UDF для IB - тьма... С кучей наработок с исходными текстами - и делфийскими, и сишными)...
asmith (2003-01-22 19:59:00) [3]Рискну предложить такой вариант:
1. передавать в процедуру полное имя файла со строками, лежащего где-то на сетевой шаре
2. в процедуре через ХП sp_OACreate создать объект типа FileSystemObject, читать ним файл построчно
3. каждую строку обрабатівать, как нужно.
Можно также попробовать функцией CHARINDEX (не уверен, что она умеет работать с text) искать 0x0D,0x0A, выделять строки и совать в локальную в процедуре переменную типа table.
Ihor Osov'yak (2003-01-22 19:21:00) [4]
2 asmith (22.01.03 18:44)
> А почему чтение по одному символу? -
Тут я пожалуй не прав, можно читать в строку-буффер, наверно так и сделаю.
А строчки оканчиваются тем, чем положено для plain ansi text - 0x0D,0x0A..
asmith (2003-01-22 18:44:00) [5]А почему чтение по одному символу? И какой критерий разбиения? В смысле чем строки должны заканчиваться.
Ihor Osov'yak (2003-01-22 17:50:00) [6]2 asmith (22.01.03 17:36)
Ну блин, достал этот MSSQL. В IB если чего и нельзя, но очень хочется, то или поискал чужую UDF, или написал свою ... На том же делфи...
А задача в общем-то простая, елементарный парсинг... В хранимую процедуру передается параметр типа text (плоский ansi текст, может быть большим, до нескольких мегабайт), нужно разбить на строчки, и рассовать по разным табличкам в зависимости от вида строчек...
А уже день парюсь, ничего более умного чем мазохизм с двумя временными табличками + READTEXT по одному символу на ум не приходит
ЗЫ - Сорри за эмоции, накипело...
Зы2 - делать прослойку типа сервера бизнес-логики не предлагать, заказчик парсинг хочет на сервере...
asmith (2003-01-22 17:36:00) [7]Сорри, это не то! ИМНО в локальную переменную нельзя.
asmith (2003-01-22 17:29:00) [8]USE pubs
DECLARE @textpointer varbinary(16)
SELECT @textpointer = TEXTPTR(pr_info) FROM pub_info
READTEXT pub_info.pr_info @textpointer 1 25