Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проверка наличия/вставка слова в таблицу. Как сделать для нескольких слов в 1-м запросе?
|
|||
|---|---|---|---|
|
#18+
Задача: 1. если слово есть в таблице, вернуть его WordID. 2. если слова нет в таблице, вставить это слово в таблицу и вернуть WordID. WordID создается автоматически с автоинкрементом. Я сделал это с помощью хранимой процедуры для одного слова: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. При выполнении запроса Код: sql 1. я получаю WordID слова 'example'. Подскажите, как сделать то же самое, но сразу для 10 - 20 слов в этом аргументе процедуры (разделитель пробел или запятая, не важно). Вот так: Код: sql 1. чтобы процедура вернула либо одно значение в виде строки со списком WordID этих слов: Код: plaintext либо таблицу Код: plaintext 1. 2. 3. 4. 5. 6. PS. У меня MS SQL 2000 MSDE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:39 |
|
||
|
Проверка наличия/вставка слова в таблицу. Как сделать для нескольких слов в 1-м запросе?
|
|||
|---|---|---|---|
|
#18+
нуу с этим MalyavPS. У меня MS SQL 2000 MSDE. "красиво" не получится :) всё будет "тупо" и "деревянно" - табличная функция, которая разбивает список на строки (примеров на форуме валом) - цикл по результату запроса этой таб.функции - временная табл. в которую "ложаться" найденные/вставленные ID - в конце ХП - select из времянки пс автор Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:49 |
|
||
|
Проверка наличия/вставка слова в таблицу. Как сделать для нескольких слов в 1-м запросе?
|
|||
|---|---|---|---|
|
#18+
Поможет Функция, которая делит строку на слова В 2000-м как раз появились функции. Хотя, можно и просто использовать тело предлагаемой функции. Её результат вставляйте в таблицу по условию NOT EXISTS(). ID слов в таблице выбирайте по условию WHERE EXISTS(SELECT [ЗначениеСтроки] FROM [функция]) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 13:00 |
|
||
|
Проверка наличия/вставка слова в таблицу. Как сделать для нескольких слов в 1-м запросе?
|
|||
|---|---|---|---|
|
#18+
iapID слов в таблице выбирайте по условию WHERE EXISTS(SELECT [ЗначениеСтроки] FROM [функция])Или вместо EXISTS() Код: sql 1. @Str - это строка с разделителем-пробелом, T и Field - таблица, в которую вставляем и поле со словом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 13:08 |
|
||
|
Проверка наличия/вставка слова в таблицу. Как сделать для нескольких слов в 1-м запросе?
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы. Буду разбираться с функциями. Вообще, SQL 2000 у меня стоит "спокон веку" на компьютере, где я пишу и проверяю код. Когда два месяца назад разворачивал вебсайт на виртуальной машине, мне пришлось устанавливать Microsoft SQL Server 2017, так как 2000-й "на себя" она устанавливать отказалась. Потом переносить базу с 2000-го на 2017 сервер. Чувствую, скоро придется переходить на него и на машине для разработки. Чтобы не иметь проблем с несовместимостью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 13:24 |
|
||
|
Проверка наличия/вставка слова в таблицу. Как сделать для нескольких слов в 1-м запросе?
|
|||
|---|---|---|---|
|
#18+
MalyavСпасибо за советы. Буду разбираться с функциями. Вообще, SQL 2000 у меня стоит "спокон веку" на компьютере, где я пишу и проверяю код. Когда два месяца назад разворачивал вебсайт на виртуальной машине, мне пришлось устанавливать Microsoft SQL Server 2017, так как 2000-й "на себя" она устанавливать отказалась. Потом переносить базу с 2000-го на 2017 сервер. Чувствую, скоро придется переходить на него и на машине для разработки. Чтобы не иметь проблем с несовместимостью. это как вы смогли так продержаться 18 лет чтобы ниразу не поднять версию сиквела?:)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 15:17 |
|
||
|
Проверка наличия/вставка слова в таблицу. Как сделать для нескольких слов в 1-м запросе?
|
|||
|---|---|---|---|
|
#18+
MalyavЧувствую, скоро придется переходить на него и на машине для разработки. Чтобы не иметь проблем с несовместимостью.Конечно, версии девелоперской среды должны соответствовать рабочим версиям, как же иначе? Это же банально неудобно, даже если не использовать новых фич. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 15:26 |
|
||
|
Проверка наличия/вставка слова в таблицу. Как сделать для нескольких слов в 1-м запросе?
|
|||
|---|---|---|---|
|
#18+
Я обычно не стремлюсь к обновлению без необходимости. Работает, и ладно. Когда прижмет - обновляюсь. По сути моего вопроса - поставленную задачу я решил. Начал действовать по предложенному плану: courtнуу с этим MalyavPS. У меня MS SQL 2000 MSDE. "красиво" не получится :) всё будет "тупо" и "деревянно" - табличная функция, которая разбивает список на строки (примеров на форуме валом) - цикл по результату запроса этой таб.функции - временная табл. в которую "ложаться" найденные/вставленные ID - в конце ХП - select из времянки Табличную функцию я взял из статьи Массивы и Списки в SQL Server . Вот эта функция: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. На выходе у нее таблица из трех полей, номер по порядку и два одинаковых списка слов из распарсенной строки в varchar и nvarchar. Номер п/п мне пригодился для возврата полного списка WordID в том порядке, в каком слова шли в строке. Из этой же статьи я взял и код, как получить список WordID тех слов, которые уже есть в таблице WordList. Код: sql 1. 2. 3. Следующей задачей было: 1-определить слова, которых в таблице нет. Тут пришлось мне повозиться, так как я не большой спец по SQL. Решение нашел такое (по подсказке iap про использование NOT EXISTS): Код: sql 1. 2. и 2-вставить новые слова в таблицу WordList. Тут я сначала пытался делать перебором строк из этого запроса, созданием временной таблицы, но в результате нашел более простой вариант: Код: sql 1. 2. 3. Теперь, когда я знаю, что все слова из исходной строки есть в таблице, я возвращаюсь к "список WordID тех слов, которые уже есть в таблице WordList" и использую его в конце ХП. Таким образом, ХП для получения WordID соответствующему перечисленным в строке словам (с одновременным добавлением отсутствующих в таблице слов) у меня получилась такая: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Использование: Код: javascript 1. 2. Это была промежуточная задача, в конце концов мне надо было "создать другую таблицу" и вставить в нее полученные WordID с русским переводом каждого слова. Это я также решил еще двумя запросами. PS. Это решение работает и на 2000-м и на 2017- сервере. Но court как бы намекает, что есть более красивое решение, не доступное для 2000 сервера. Если у кого есть желание, напишите сюда, что это за решение... Благодарю всех ответивших на мой вопрос, вы дали мне верное направление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2018, 17:52 |
|
||
|
Проверка наличия/вставка слова в таблицу. Как сделать для нескольких слов в 1-м запросе?
|
|||
|---|---|---|---|
|
#18+
MalyavНо court как бы намекает, что есть более красивое решение, не доступное для 2000 сервера. Если у кого есть желание, напишите сюда, что это за решение...в 2017-ом есть стандартный STRING_SPLIT + есть merge с output Так что, при желании, действительно можно было бы всё сделать "в 1-м запросе", как в сабже Типа такого: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. пс update set target.Word=source.value , конечно "не очень" хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2018, 11:50 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39728026&tid=1688835]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
135ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 444ms |

| 0 / 0 |
