Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 where in  [new]
caca
Member

Откуда:
Сообщений: 29
Добрый день!

например есть таблица A из двух полей:
id int (идентификатор)
fio nvarchar(50) (фамилия)
в другой таблице в поле ids nvarchar(MAX) хранятся список id через разделитель запятую, например '1,5,18'

задача: сделать функцию возвращающую строку с фамилиями через разделитель-запятую

проблема: в функциях нельзя использовать временные таблицы, хотел строку '1,5,18' распарсить во временную таблицу и
select @s=@s + RTRIM(A.FIO) + ',' from ##temp inner join A on ##temp.id=A.id

получилось бы в итоге к примеру 'Иванов,Петров,Сидоров,'

хотел из функции вызвать EXECUTE sp_executesql - тоже нельзя...

Подскажите, может есть какойнибудь простой вариант? Что то типа select * from A where id in ***IDs***
7 сен 17, 09:57    [20777435]     Ответить | Цитировать Сообщить модератору
 Re: where in  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3673
STRING_SPLIT ( string , separator )
https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql
7 сен 17, 10:09    [20777482]     Ответить | Цитировать Сообщить модератору
 Re: where in  [new]
Добрый Э - Эх
Guest
caca,

используй inline-view в которой будет происходит сплитинг строки значений через запятую в таблицу-столбец.
вместо IN делать JOIN полученной на лету "таблицы-столбца" с твоей таблице А
как пример - почитать темку
Задачи 1,2 - максимально близкое к тому, что тебе нужно...
7 сен 17, 10:09    [20777483]     Ответить | Цитировать Сообщить модератору
 Re: where in  [new]
alex_p_n
Member [заблокирован]

Откуда: Дніпро
Сообщений: 145
caca
...в другой таблице в поле ids nvarchar(MAX) хранятся список id через разделитель запятую, например '1,5,18'...

За такое надо бить по рукам линейкой!
Это значит, что таблица даже к 1НФ не приведена. Т.е. это не таблица, просто куча каких-то данных, кое-как туда сваленых
7 сен 17, 10:11    [20777493]     Ответить | Цитировать Сообщить модератору
 Re: where in  [new]
iii2
Member

Откуда:
Сообщений: 202
Можно не парсить, если количество небольшое
Можно добавить к перечню идентификаторов запятую слева и справа, так чтоб получилось ",5,1,3," и искать like '%,' + cast(id as varchar(10)) + ',%'
7 сен 17, 10:14    [20777505]     Ответить | Цитировать Сообщить модератору
 Re: where in  [new]
caca
Member

Откуда:
Сообщений: 29
Всем большое спасибо!
7 сен 17, 10:41    [20777658]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить