Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Aleks_Aleks Member Откуда: Сообщений: 294 |
В процедуре есть списки значений: 1) 1,3,5,10,20,30,1000 2) 2,4,8,11,13,111,2000 3) 12,14,16,22,33,44,55 в процедуру передается параметр со значением (к примеру "8"). Нужно определить к какому списку относится значение "8", и другой переменой присвоить значение "2" (т.к. значение 8 - относится к списку № 2). Как это реализовать ? |
16 июл 14, 13:07 [16311972] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9636 |
И в каком виде эти списки значений? |
16 июл 14, 13:11 [16311995] Ответить | Цитировать Сообщить модератору |
_human Member Откуда: Сообщений: 566 |
Aleks_Aleks, список это таблица ? charindex('8,', 'список №2') > 0 charindex(',8', 'список №2') > 0 charindex(',8,', 'список №2') > 0 |
16 июл 14, 13:12 [16311999] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8335 |
Отказаться от хард-кодинга таких переменных, внести значения в таблицу. |
||
16 июл 14, 13:20 [16312071] Ответить | Цитировать Сообщить модератору |
Aleks_Aleks Member Откуда: Сообщений: 294 |
Список - это столбец ID из таблицы Docum. |
16 июл 14, 13:22 [16312084] Ответить | Цитировать Сообщить модератору |
Aleks_Aleks Member Откуда: Сообщений: 294 |
_human,DECLARE @document varchar(1000); DECLARE @TempP varchar(10); SET @TempP=604 SELECT @document = '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,45,46,47,48,49,50, 51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, 650,651,1001,1002,1003'; IF CHARINDEX(@TempP, @document)>0 SET @TempP =1 SELECT @TempP Так уже хорошо, но может можно как нить по лучше ) |
16 июл 14, 13:28 [16312135] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37153 |
|
||
16 июл 14, 13:29 [16312145] Ответить | Цитировать Сообщить модератору |
Aleks_Aleks Member Откуда: Сообщений: 294 |
Гавриленко Сергей Алексеевич, Тогда не очень хорошо ( |
16 июл 14, 13:35 [16312183] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37153 |
Вообще, этот бред надо бы нормализовать. Если лень, то есть следующие варианты: 1. Дописать в начале и в конце списка по запятой и искать CHARINDEX(',' + @TempP + ',', @document). Это при условии, что нигде нет пробелов. 2. Парсить строку в рекордсет любым способом отсюда: https://www.sql.ru/articles/mssql/03060701arraysandlistsinsqlserver.shtml |
16 июл 14, 13:38 [16312198] Ответить | Цитировать Сообщить модератору |
_human Member Откуда: Сообщений: 566 |
Aleks_Aleks,DECLARE @document varchar(1000); DECLARE @TempP varchar(10); SET @TempP='1' SELECT @document = '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,45,46,47,48,49,50, 51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, 650,651,1001,1002,1003'; IF CHARINDEX(','+ @TempP+',', @document) > 0 SET @TempP = 'ok' else SET @TempP = 'nope' SELECT @TempP нужно еще учесть, вариант в концом/началом этого архитектурного решения. |
16 июл 14, 13:41 [16312216] Ответить | Цитировать Сообщить модератору |
Aleks_Aleks Member Откуда: Сообщений: 294 |
Данная функция подошла, проверил работает как нужно ) Всем большое спасибо !! |
16 июл 14, 13:47 [16312264] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47051 |
Семён Семёныч... © |
||
16 июл 14, 13:48 [16312265] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47051 |
_human, стесняюсь спросить... А что такое "nope"? |
16 июл 14, 13:49 [16312278] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
нет |
||
16 июл 14, 13:50 [16312283] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8335 |
"не-а" по-русски :) |
16 июл 14, 13:55 [16312312] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8335 |
Это изврат, если значение параметра от клиента - передавайте XML, если хардкод - внесите список в таблицу. |
||
16 июл 14, 13:59 [16312337] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Поставьте 2 запятые с обоих сторон строки и используйте только charindex(',8,', 'список №2') > 0 |
||
16 июл 14, 15:26 [16313058] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |