|
|
|
Ограничение длины LIKE pattern
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, я столкнулся со следующей проблемой (NT и Win2k, SQL Server 7 sp2): по определенным причинам я вынужден включить в WHERE-clause текстовое поле (data type = text), используя LIKE (LIKE '%.....' или LIKE '.....'). В принципе, мне нужно точное сравнение, но "=" не может использоваться для текстовых полей... Проблема в том, что если выражение для LIKE содержит не более, чем 7846 символов, то все работает нормально; если же больше - то record просто не находится! Не выдается и сообщение об ошибке... Проверял на нескольких серверах... В Microsoft KnowledgeBase и в BooksOnLine ничего по этому поводу найти не могу. Буду рад подсказке / совету / помощи. Спасибо, Юрий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 15:05:01 |
|
||
|
Ограничение длины LIKE pattern
|
|||
|---|---|---|---|
|
#18+
попробуй patindex а вообще, зачем нужен такой изврат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 15:27:27 |
|
||
|
Ограничение длины LIKE pattern
|
|||
|---|---|---|---|
|
#18+
Спасибо, пробовал уже, не получается: "Argument data type text is invalid for argument 1 of patindex function" Кстати, TEXTSIZE установлен на 129024. Зачем это все нужно? Существует аппликация (уже пару лет; не мной написанная), из форм которой исполняется UPDATE, в WHERE-clause которого люди (голландцы :)) включили все поля таблицы. Причина - неясна, вероятно, исключение конкурирующих UPDATEs. Теперь вот обнаружили bug. Моя задача - эффективно (быстро) помочь человеку (голландцу, но другому :)), который этим сейчас занимается. Единственное быстрое решение, которое я могу придумать, это "обрезать" LIKE до, например, 2000 символов. Это, к сожалению, не решает полностью проблему конкурирующих UPDATEs, которую, конечно, решить можно, но для этого нужно больше времени... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 15:55:53 |
|
||
|
Ограничение длины LIKE pattern
|
|||
|---|---|---|---|
|
#18+
Если стоит задача проапдейтить только одну запись, то непонятно, причем тут поле text... первичным ключом (или уникальным индексом) в таблице что является? указания только этих полей имхо вполне должно хватить... а проблемы с like имхо возникают из-за того, что паттерн, как я подозреваю, хранится в типе char. у которого длина не более 8000 символов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 16:51:05 |
|
||
|
Ограничение длины LIKE pattern
|
|||
|---|---|---|---|
|
#18+
1. Ок, пробую восстановить ход мысли тех, кто это построил: представьте себе, что 2 юзера одновременно открыли эту запись, и отредактировали ее, в том числе (как минимум) один из них - это текстовое поле (там хранится важный текст, документ по сути дела; он время от времени изменяется). Когда один из них нажмет на Save, запись сохранится. Когда второй сделает то же, появится сообщение "Запись изменена другим юзером, а именно Х". Это и является целью расширенного WHERE; если использовать только PK, этого не добьешься. (Это не означает, что это решение - лучшее. Еще раз - не я его придумал!) 2. Я тоже думаю, что это связано с макс. длиной в 8000 символов, для varchar... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 17:34:09 |
|
||
|
Ограничение длины LIKE pattern
|
|||
|---|---|---|---|
|
#18+
а если в данной таблице добавить поле дата- время в микросекундах - последнего обновления ПОЛЯ(не записи) и проверять на изменения его? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 17:56:18 |
|
||
|
Ограничение длины LIKE pattern
|
|||
|---|---|---|---|
|
#18+
Или например столбец timestamp и проверять его значение при сохранении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 18:05:46 |
|
||
|
Ограничение длины LIKE pattern
|
|||
|---|---|---|---|
|
#18+
Вообще-то для предотвращения одновременной модификации одной и тойже записи уществуют гораздо более элегантные решения... Проще всего перед началом редактирования заносить id редактируемой записи в специальную табличку (или в отдельный список на сервере приложений, если он есть), а после окончания редактирования - убирать... Естественно, если второй пользователь захочет отредактировать этот же документ, то ему просто выдастся сообщение, что "документ редактируется" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2002, 09:07:32 |
|
||
|
Ограничение длины LIKE pattern
|
|||
|---|---|---|---|
|
#18+
никто не спорит о множестве "элегантных решений", всех их плюсах и минусах, если второму пользователю надо знать о том что запись редактируется кем-то То создание служебной таблицы действительно удобнее. если же нужно отслеживать что обновляешь те же данные что и загрузил - то сравнение значений более подходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2002, 10:30:14 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1821550]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 336ms |

| 0 / 0 |
