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

Откуда:
Сообщений: 51
Подскажите кто чем может..
Имеется порядка 40 пользователей, у которых, в большинстве, слабые машины. К ним поступают наборы данных фиксированного формата от 200 до 6000 записей. Эти данные нужно проверить на корректность путем сравнения с 5-6 таблицами на сервере. Если с клиента посылать запросы на сервер и всю логику проверки делать на нем же (клиенте), основываясь на результатах запросов, то, при приближении кол-ва записей к 1000, некоторые клиенты надолго впадают в задумчивость (если больше записей, то уже многие).
Хотелось бы, чтобы пользователи передавали данные на сервер, где бы происходил весь анализ и назад возвращал уже готовый результат. Пользователю пришлось бы только передать весь набор данных на сервер и получить назад корректные данные, а с учетом того, что в основном данные правильные, назад вообще бы пошли в основном одни НАЛЛы (отсутствие ошибки в этом поле).
Я сначала пошел по такому пути: пользователь (через App role) создает на сервере свою (с уник. именем) таблицу и закачивает данные. Далее, программа вызывает другие хранимки, в зависимости от необходимости той или иной проверки данных. Но так как только этот сеанс знает имя этой таблицы, то что-то много получается динамических запросов…Надо во все хранимки передавать имя таблицы @TableName, к-ю надо обработать. L как бы в итоге не получить большее время ответа на клиенте, когда все пользователи ломанутся делать проверки..
Вот примеры создания+заполнения таблицы и одной проверки.
СREATE PROCEDURE dbo.GatherData @TableName varchar(19), @Parametr varchar(19) AS
declare @stroka varchar(100)
begin
if Не_существует @TableName begin
exec ('CREATE TABLE '+@TableName+' (…)’)
exec ('CREATE INDEX ix1 ON '+@TableName+’…’)
exec('CREATE TRIGGER Tr1 ON '+ @TableName +'…’)
end
exec ('insert '+ @TableName + '(Parametr) VALUES(@Parametr)’)
end

CREATE PROCEDURE SolveData @TableName char(19)
AS begin
exec ('Update '+ @TableName+' set a.Field1=b.Field2 from '+ @TableName+' a left join SomeTable b on a.key=b.key')
end

Такое ощущение, что для такой задачи есть какое-то более элегантное решение, чем разрешать пользователю создавать таблицы на сервере, да и без такой кучи динамических запросов. Подскажите в какую сторону смотреть?
28 окт 04, 12:06    [1067727]     Ответить | Цитировать Сообщить модератору
 Re: App role, CreateTable для юзера, динамич. запросы и прочее?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
А чем вас временные таблицы не устраивают и апп. роли зачем используете?

1. Создали с клиента временную таблицу.
2. Залили туда данные.
3. вызвали необходимое кол-во хп для проверки.
4. вернули то что нужно клиенту.

Не вижу тут ни апп. ролей, ни динамического SQL.
28 окт 04, 12:21    [1067794]     Ответить | Цитировать Сообщить модератору
 Re: App role, CreateTable для юзера, динамич. запросы и прочее?  [new]
Hoi
Member

Откуда:
Сообщений: 51
pkarklin
А чем вас временные таблицы не устраивают и апп. роли зачем используете?
1. Создали с клиента временную таблицу.


В борьбе за оптимизацию (на сервере не только мой Сиквел стоит, но и много другого, да и клиентов много будет) связался с триггерами, а временные таблицы, вроде как, не поддерживают их. Но в целом, не отвергаю такой вариант. я как раз за ними и обратился сюда.
Только поясните, как в проверках (в других хранимках) поминать созданную таблицу? разве не параметром ее имя передавать?
28 окт 04, 12:32    [1067856]     Ответить | Цитировать Сообщить модератору
 Re: App role, CreateTable для юзера, динамич. запросы и прочее?  [new]
Glory
Member

Откуда:
Сообщений: 104760
В борьбе за оптимизацию (на сервере не только мой Сиквел стоит, но и много другого, да и клиентов много будет) связался с триггерами, а временные таблицы, вроде как, не поддерживают их.

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

- Для чего нужны триггеры в промежуточной таблице ? Да еще если она персональна для каждого коннекта.
28 окт 04, 12:36    [1067877]     Ответить | Цитировать Сообщить модератору
 Re: App role, CreateTable для юзера, динамич. запросы и прочее?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Только поясните, как в проверках (в других хранимках) поминать созданную таблицу? разве не параметром ее имя передавать?


Ее имя не надо через параметр передавать. Временная таблица, созданная сессией видна во всех хп, вызываемых этой сессией. так что просто явно в инструкциях прописывайте имя этой временной таблицы.
28 окт 04, 12:36    [1067879]     Ответить | Цитировать Сообщить модератору
 Re: App role, CreateTable для юзера, динамич. запросы и прочее?  [new]
Hoi
Member

Откуда:
Сообщений: 51
pkarklin
Временная таблица, созданная сессией видна во всех хп, вызываемых этой сессией. так что просто явно в инструкциях прописывайте имя этой временной таблицы.


Предполагалось, что такая таблица будет для каждого пользователя своя, поэтому имена у них уникальные и поэтому их надо помнить. Но в целом, я щас уже склоняюсь к варианту предложенному Glory насчет единой таблицы для всех.
28 окт 04, 12:45    [1067943]     Ответить | Цитировать Сообщить модератору
 Re: App role, CreateTable для юзера, динамич. запросы и прочее?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Предполагалось, что такая таблица будет для каждого пользователя своя, поэтому имена у них уникальные и поэтому их надо помнить


При использовании временных таблиц имя у нее будет одно, но для каждого пользователя она будет своя. И не надо будет заморачиваться с идентификацией кусков данных отдельных пользователей в постоянной таблице.
28 окт 04, 12:49    [1067961]     Ответить | Цитировать Сообщить модератору
 Re: App role, CreateTable для юзера, динамич. запросы и прочее?  [new]
Hoi
Member

Откуда:
Сообщений: 51
Glory
Да же если не использовать временную таблицу а использовать постоянную то почему бы не использовать одну постоянную таблицу для всех коннектов ? разумеется добавив столбец отличающий данные одного коннекта от данных другого

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

Glory

- Для чего нужны триггеры в промежуточной таблице ? Да еще если она персональна для каждого коннекта.

Таблица не была промежуточной. В нее пользователь заливал данные, там же обновлял их хранимками-проверками и оттуда же забирал результат
28 окт 04, 12:49    [1067963]     Ответить | Цитировать Сообщить модератору
 Re: App role, CreateTable для юзера, динамич. запросы и прочее?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Таблица не была промежуточной. В нее пользователь заливал данные, там же обновлял их хранимками-проверками и оттуда же забирал результат
Не пойму я как таблица не может быть промежутчной если ее имя генерировалось каждый раз уникальное ? Это какая-то непонятная мне логика.
У вас при каждом запуске количество таблиц в базе все растет и растет ?
28 окт 04, 12:53    [1067982]     Ответить | Цитировать Сообщить модератору
 Re: App role, CreateTable для юзера, динамич. запросы и прочее?  [new]
Hoi
Member

Откуда:
Сообщений: 51
Glory

Не пойму я как таблица не может быть промежутчной если ее имя генерировалось каждый раз уникальное ? Это какая-то непонятная мне логика.
У вас при каждом запуске количество таблиц в базе все растет и растет ?

ну в таком случае - промежуточная. Не хотелось давать права на удаление таблиц пользователю, посему таблицы просто в конце дня удалялись одной хранимкой. у них общий шаблон создания имени и поэтому все убивались одним махом.
28 окт 04, 12:58    [1068009]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить