Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Диченка Member Откуда: ИТ-Олимп, 58.1-летний супермен Сообщений: 3989 |
Дано: Символьная строка в виде |aaa|bbb|ccc|ddd|eee| Нужно разбить строку, получив отдельно значение aaa, bbb, ccc, ddd, eee. Символы в строке разделяются символом | Длина значений aaa,bbb,ccc,ddd,eee - переменная и не всегда равна 3-м знакам. |
13 окт 04, 07:37 [1028387] Ответить | Цитировать Сообщить модератору |
Luchkin Dmitry Member Откуда: Новосибирск -> Ангарск -> Братск -> Мск Сообщений: 1921 |
|
||
13 окт 04, 07:48 [1028402] Ответить | Цитировать Сообщить модератору |
Диченка Member Откуда: ИТ-Олимп, 58.1-летний супермен Сообщений: 3989 |
Огромное спасибо, Дмитрий! |
13 окт 04, 07:51 [1028406] Ответить | Цитировать Сообщить модератору |
Luchkin Dmitry Member Откуда: Новосибирск -> Ангарск -> Братск -> Мск Сообщений: 1921 |
незачто - это первое, чему учат в школе... |
13 окт 04, 07:55 [1028409] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
Для дальнейшего развития https://www.sql.ru/articles/mssql/03060701ArraysAndListsInSQLServer.shtml |
13 окт 04, 08:17 [1028438] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
Так вот, кто уязвимый код пишет! :) |
13 окт 04, 11:13 [1029118] Ответить | Цитировать Сообщить модератору |
Makar4ik Member Откуда: Когда-то были Лужки, а теперь Бордюр-Сити. Сообщений: 2676 |
Обоснуйте, интересно все-таки! |
||
13 окт 04, 11:33 [1029225] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
Достаточно строке стать чуть более длинной и раскапывание ошибок будет очень занимательным. Скажем, безобидный код select 1 union all select 2 может выглядеть и как select 1 union all sele (синтакс еррор) и как select 1 unio (ошибки нет, но это даже хуже) А строка, которую реплейсят, может быть и параметром процедуры и "exec()" тут - самое то средство... |
13 окт 04, 11:41 [1029269] Ответить | Цитировать Сообщить модератору |
Диченка Member Откуда: ИТ-Олимп, 58.1-летний супермен Сообщений: 3989 |
Вот поэтому разработку сложных программных систем следует доверять только очень гениальным и талантливым людям навроде меня. |
||
13 окт 04, 11:47 [1029295] Ответить | Цитировать Сообщить модератору |
iSestrin Member Откуда: Новосибирск Сообщений: 3811 |
create table a0 (i int) insert into a0 select 1 select * from a0 declare @c varchar(1000) select @c= '|aaa|bbb|ccc|ddd|eee|''; drop table a0; select ''''' select @c= 'select '''+ replace(substring(@c, 2, len(@c)-2), '|', ''' union all select ''')+'''' exec (@c) select * from a0 |
13 окт 04, 13:08 [1029733] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
Гениальным и талантливым людям навроде тебя, раз уж им доверена разработка сложных програмных систем, стоит обратить внимание на такой несложный технический прием, как распарсивание строки по заранее указанным разделителям. Применение этого приема гарантирует стабильную работу кода и отсутствие уязвимостей. Скажем, вот так:
|
||||
13 окт 04, 13:23 [1029826] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |