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

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

Возникла необходимость в неокоторыйх хранимых процедурах в зависимости от конфигурации возвращать разное количество столбцов. Клиенты одной торговой марки видят 5 столбцов, клиенты другой 3. Решение скорей всего будет комбинированое. Будет реализация по стороне приложения, как-то динамично прятать/показывать столбцы в гриде, так и по стороне базы, некоторые столбцы будут достатчно "тяжелые" чтоб на постоянно оставить в запросе.

По стороне базы вижу 2 решения:
1. Банальный "if" и несколько версий запроса.
2. Динамический "sql" генерированый на основе конфигурации.

Может кто сталвился с подобной задачей, подскажите какие еще есть варианты.
26 окт 16, 09:20    [19822342]     Ответить | Цитировать Сообщить модератору
 Re: Разное количество вовращаемых столбцов  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
раздать права на данные и выдавать всем все в зависимоти от прав показывать информацию в столбцах или нет
26 окт 16, 09:35    [19822395]     Ответить | Цитировать Сообщить модератору
 Re: Разное количество вовращаемых столбцов  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Разве есть права на столбцы? Вроде на объект в целом. Или подразумеваются права "логические", своя собственная конфигурация.
26 окт 16, 09:43    [19822433]     Ответить | Цитировать Сообщить модератору
 Re: Разное количество вовращаемых столбцов  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
нарусийте свою систему прав и все..
26 окт 16, 09:58    [19822505]     Ответить | Цитировать Сообщить модератору
 Re: Разное количество вовращаемых столбцов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
mezzanine
По стороне базы вижу 2 решения:
1. Банальный "if" и несколько версий запроса.
2. Динамический "sql" генерированый на основе конфигурации.
3. Делать лишние столбцы с значением NULL, используя CASE
4. Делать разные версии процедур для разных клиентов. Тогда это сводится к вопросу веток проекта, инсталляторов версий и т.д.
26 окт 16, 10:02    [19822529]     Ответить | Цитировать Сообщить модератору
 Re: Разное количество вовращаемых столбцов  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
Посмотрите вот тут: https://www.mssqltips.com/sqlservertip/2124/filtering-sql-server-columns-using-column-level-permissions/
26 окт 16, 10:03    [19822533]     Ответить | Цитировать Сообщить модератору
 Re: Разное количество вовращаемых столбцов  [new]
mezzanine
Member

Откуда:
Сообщений: 157
3unknown,

Проверю, но что-то мне подсказывает что поля не будут прятаться, а только буду получать ошибку при пробе получения даных с запрещеных полей.
26 окт 16, 10:10    [19822564]     Ответить | Цитировать Сообщить модератору
 Re: Разное количество вовращаемых столбцов  [new]
o-o
Guest
mezzanine
Разве есть права на столбцы?

Да, есть.
Только это не поможет "не показывать" часть столбцов.
Просто при отсутствии прав на столбец при попытке выборки из него будет выдаваться ошибка.
Соответственно, если в таблице 2 столбца: col1, col2, на первый есть права, на второй нет, попытка выборки select col1, col2 from.. завершится ошибкой, в то время как select col1 прокатит.
26 окт 16, 10:15    [19822593]     Ответить | Цитировать Сообщить модератору
 Re: Разное количество вовращаемых столбцов  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20585
Отдавайте максимальное количество полей. А для тех, кому надо меньше, "лишние поля" заполняйте Null-ами и отсекайте уже на клиенте.
26 окт 16, 12:37    [19823453]     Ответить | Цитировать Сообщить модератору
 Re: Разное количество вовращаемых столбцов  [new]
Bigvu
Member

Откуда: Кемерово
Сообщений: 13
все конечно зависит от структуры и объема данных , но можно попробовать подход с подзапросами (или CTE), где в подзапросе(или CTE) выбираются данные в зависимости от типа клиента. потом примеяем left join к выборке для всех. а недостающие колонки прятать на клиенте, например передавая признак в колонке. тогда будет один запрос и гибко с типами клиентов можно поиграть:

DECLARE @cltype INT = 1
;WITH forall AS (
select id,col_for_all_1, col_for_all_2
FROM data_for_all
)
,for_type_less_3 AS (
  SELECT id,col_3
  from data_for_type_less_3
  WHERE @cltype <3
)
SELECT forall.id, col_for_all_1, col_for_all_2,
       col_3,
       @cltype cltype -- будем прятать колонки на клиента
from forall LEFT JOIN for_type_less_3 ON forall.id = for_type_less_3.id
26 окт 16, 13:01    [19823548]     Ответить | Цитировать Сообщить модератору
 Re: Разное количество вовращаемых столбцов  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2994
как вариант:
1. создаете для каждой компании схему
2. для пользователей каждой компании ставите дефолтной нужную схему
3. пишете вьюхи с необходимым набором полей в каждой схеме
4. в приложении в запросах у вьюх схему не указываете и тогда должна подхватится вьюха из дефолтной схемы
26 окт 16, 13:17    [19823623]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить