2011-12-19 8 views
1

Вот мой сценарий:SQL Server - таблицы, специфичные для каждого пользователя

Пользователь вводит диапазон дат ввода. Выполняется Хранимая процедура, которая заполняет другие таблицы на основе дат. Затем пользователь может нажать кнопку, чтобы просмотреть эти таблицы (другой SP, который выбирает из таблиц).

Существует несколько пользователей. Каждый пользователь должен иметь возможность иметь свои собственные таблицы, так сказать, потому что диапазоны дат могут быть разными. Прямо сейчас пользователь 1 запускает SP, который заполняет таблицу датами A и B. Затем пользователь 2 запускает SP, который заполняет таблицу для дат C и D. Теперь пользователь 1 идет и нажимает кнопку просмотра, ожидая данных для дат A и B, но что происходит это данные для C и D, потому что последний пользователь, который использовал SP, использовал даты C и D.

Как я могу хранить данные отдельно/локально для каждого пользователя?

Спасибо.

+0

Почему вы в первую очередь кэшируете результаты запроса? – ConcernedOfTunbridgeWells

+1

Зачем вам нужно иметь разные таблицы для каждого пользователя снова? Разумеется, одна таблица с полем, определяющим пользователя, для которого предназначены данные, сделает вас? –

ответ

2

Если вам действительно нужно сохранить результаты запроса, вам нужно назначить набор результатов либо на пользователе, либо генерировать идентификатор сценария каждый раз, когда пользователь запускает отчет.

Самый простой подход - просто запустить запрос как отчет и не сохранять результаты. Пересчитайте вывод и просто выгружайте его каждый раз, когда пользователь запускает отчет (т. Е. Не сохранит результаты).

Если вам нужно сохранить результаты и, то каждый пользователь должен работать только с одним диапазоном дат в любой момент времени, после чего таблицу можно аннотировать с помощью идентификатора пользователя.

Если пользователь может работать с несколькими сценариями, то для каждого пользователя должна быть другая контрольная таблица со сценариями. Когда пользователь выполняет прогон, тогда генерируется новый идентификатор сценария. Вам понадобится экран, позволяющий пользователям выбирать сценарий в этом случае и, возможно, некоторые средства очистки устаревших.

+0

Чтобы расширить, пользователь вводит daterange для включения заказов. Затем SP получает все заказы в пределах этого диапазона дат (тысячи), всех позиций (тысяч) и позиций (тысяч) и возвращает значения, сколько стоят эти заказы, сколько мы можем производить и т. Д. Время выполнения SP длинное. Затем пользователь хочет видеть, какие заказы и какие элементы/заказы составляют эти значения, поэтому он нажимает «просмотр». И именно в этот момент я поднимаю данные из этих таблиц. Поэтому мне нужно сохранить результаты, и кажется, что столбец идентификатора пользователя является рекомендуемым. Спасибо, парни. – Rivka

+0

Если вы используете SQL Server, вы можете захотеть поместить его в куб SSAS и использовать его для анализа. – ConcernedOfTunbridgeWells

0

Вы можете добавить еще один столбец в таблицу, а затем, заполнив его данными, добавьте в этот столбец переменную сеанса/идентификатор пользователя.

Затем запрос, который затем выбирается из этой таблицы, должен быть обновлен, чтобы выбрать, где совпадает идентификатор сеанса/идентификатор пользователя.

0

Похоже, вы удаляете всю таблицу каждый раз, вместо этого попробуйте удалить только данные для пользователя, выполняющего запрос. Используйте предложение WHERE в SELECT, чтобы каждый пользователь видел свои собственные данные. Это означало бы, что вам нужно сохранить имя пользователя/идентификатор с каждой строкой данных, если вы еще этого не сделали.

0

Рассмотрите возможность хранения идентификатора пользователя с каждым добавленным значением и затем введите идентификатор пользователя во всех ваших запросах. Таким образом, вы можете использовать 1 таблицу и 1 хранимую процедуру.

Поэтому, если пользователь A запускает хранимую процедуру, он добавит записи A-1A, A-2A. Когда пользователь B запускает хранимую процедуру, он добавляет записи B-1B, B-2B, B-3B и т. Д.

Когда вы нажимаете кнопку просмотра, просто вызывайте вторую хранимую процедуру, в которой вы снова передаете идентификатор пользователя, и он возвращает строки для этого идентификатора пользователя.

Смежные вопросы