powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ограничение длины LIKE pattern
9 сообщений из 9, страница 1 из 1
Ограничение длины LIKE pattern
    #32038797
Kommunarsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
я столкнулся со следующей проблемой (NT и Win2k, SQL Server 7 sp2):
по определенным причинам я вынужден включить в WHERE-clause текстовое поле (data type = text), используя LIKE (LIKE '%.....' или LIKE '.....'). В принципе, мне нужно точное сравнение, но "=" не может использоваться для текстовых полей...
Проблема в том, что если выражение для LIKE содержит не более, чем 7846 символов, то все работает нормально; если же больше - то record просто не находится! Не выдается и сообщение об ошибке...
Проверял на нескольких серверах...
В Microsoft KnowledgeBase и в BooksOnLine ничего по этому поводу найти не могу.

Буду рад подсказке / совету / помощи.
Спасибо,
Юрий
...
Рейтинг: 0 / 0
Ограничение длины LIKE pattern
    #32038805
Alexandr Kapustin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй patindex

а вообще, зачем нужен такой изврат?
...
Рейтинг: 0 / 0
Ограничение длины LIKE pattern
    #32038810
Kommunarsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, пробовал уже, не получается:
"Argument data type text is invalid for argument 1 of patindex function"
Кстати, TEXTSIZE установлен на 129024.

Зачем это все нужно? Существует аппликация (уже пару лет; не мной написанная), из форм которой исполняется UPDATE, в WHERE-clause которого люди (голландцы :)) включили все поля таблицы. Причина - неясна, вероятно, исключение конкурирующих UPDATEs. Теперь вот обнаружили bug. Моя задача - эффективно (быстро) помочь человеку (голландцу, но другому :)), который этим сейчас занимается.
Единственное быстрое решение, которое я могу придумать, это "обрезать" LIKE до, например, 2000 символов. Это, к сожалению, не решает полностью проблему конкурирующих UPDATEs, которую, конечно, решить можно, но для этого нужно больше времени...
...
Рейтинг: 0 / 0
Ограничение длины LIKE pattern
    #32038827
Alexandr Kapustin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если стоит задача проапдейтить только одну запись, то непонятно, причем тут поле text...
первичным ключом (или уникальным индексом) в таблице что является?
указания только этих полей имхо вполне должно хватить...

а проблемы с like имхо возникают из-за того, что паттерн, как я подозреваю, хранится в типе char. у которого длина не более 8000 символов...
...
Рейтинг: 0 / 0
Ограничение длины LIKE pattern
    #32038845
Kommunarsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Ок, пробую восстановить ход мысли тех, кто это построил:
представьте себе, что 2 юзера одновременно открыли эту запись, и отредактировали ее, в том числе (как минимум) один из них - это текстовое поле (там хранится важный текст, документ по сути дела; он время от времени изменяется). Когда один из них нажмет на Save, запись сохранится. Когда второй сделает то же, появится сообщение "Запись изменена другим юзером, а именно Х". Это и является целью расширенного WHERE; если использовать только PK, этого не добьешься. (Это не означает, что это решение - лучшее. Еще раз - не я его придумал!)
2. Я тоже думаю, что это связано с макс. длиной в 8000 символов, для varchar...
...
Рейтинг: 0 / 0
Ограничение длины LIKE pattern
    #32038854
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если в данной таблице добавить поле дата- время в микросекундах - последнего обновления ПОЛЯ(не записи) и проверять на изменения его?
...
Рейтинг: 0 / 0
Ограничение длины LIKE pattern
    #32038862
Strannik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или например столбец timestamp и проверять его значение при сохранении.
...
Рейтинг: 0 / 0
Ограничение длины LIKE pattern
    #32038941
Alexandr Kapustin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то для предотвращения одновременной модификации одной и тойже записи уществуют гораздо более элегантные решения...
Проще всего перед началом редактирования заносить id редактируемой записи в специальную табличку (или в отдельный список на сервере приложений, если он есть), а после окончания редактирования - убирать... Естественно, если второй пользователь захочет отредактировать этот же документ, то ему просто выдастся сообщение, что "документ редактируется"
...
Рейтинг: 0 / 0
Ограничение длины LIKE pattern
    #32038980
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никто не спорит о множестве "элегантных решений", всех их плюсах и минусах, если второму пользователю надо знать о том что запись редактируется кем-то
То создание служебной таблицы действительно удобнее. если же нужно отслеживать что обновляешь те же данные что и загрузил - то сравнение значений более подходит
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ограничение длины LIKE pattern
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]