Sql Server 2008 с массивом

55
5

У меня две таблицы в моем sql:

Пользователи:

id    name     roleid
1 David 1
2 Sean 2
3 Joe 1

Роли:

roleid    desc
1 copy
2 delete
3 move

Теперь я использую этот cmd для выбора пользователя с разрешением пользователя

SELECT * FROM Users u INNER JOIN Roles r ON u.roleid = r.roleid

Теперь я хочу знать, возможно ли построить таблицу SQL (Таблица ролей), чтобы она динамически увеличивала число ролей для каждого пользователя. что-то вроде:

Пользователи:

id    name     roleid roleid2 roleid3
1 David 1 2 3
2 Sean 2
3 Joe 1 3

спросил(а) 2013-02-05T00:10:00+04:00 6 лет, 10 месяцев назад
2
Решение
44

Используйте ассоциативный объект для обращения к отношениям "многие ко многим" между Users и Roles. UserRole первичный ключ в таблице UserRole предотвратит дублирование назначений ролей, а внешние ключи, ссылающиеся на таблицу Users and Roles, сохранят ссылочную целостность.

См. Скрипт SQL для примера реализации.

ответил(а) 2013-02-05T01:03:00+04:00 6 лет, 10 месяцев назад
Еще 1 ответ
32

Сначала я предлагаю вам использовать многие отношения. Это означает таблицу триггеров: UsersRoles (userid, roleid). Во-вторых, невозможно создать динамическое число столбцов в типичном выражении SQL. Но это возможно с помощью хранимых процедур.

вот рабочий пример sqlfiddle

ответил(а) 2013-02-05T00:26:00+04:00 6 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема