Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / динамически создаваемое VIEW / 4 сообщений из 4, страница 1 из 1
05.09.2002, 19:23:56
    #32048585
Abu
Abu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
динамически создаваемое VIEW
Доброго дня!

Не подскажите, как обойти при динамическом создании VIEW ограничение на длину строки в 8000 символов. Если создавать VIEW ч/з Server Manager то он вмещает и большее количество символов.
Для создания VIEW заношу в @sql(varchar(8000)) соответсткующую строку:
"CREATE VIEW AS SELECT ..."
но дело в том что SELECT составляется с пом. UNION - ов,
они формируются динамически и их получается много. Поэтому в 8000 символов не помещается :-(.
Как быть?

Может по-другому составить VIEW, но у меня по-другому что-то не получается. Может кто подскажет:

select ID_reg, ID_prd,
CASE WHEN ID_prd=1 THEN SUM(KZal)
ELSE SUM(KZal)-SUM(Korrect) END SerZal,
CASE WHEN ID_prd=1 THEN NULL
ELSE SUM(Korrect) END Korrect,
CASE WHEN ID_prd=1 THEN NULL
ELSE SUM(KZal) END KorSerZal,
CASE WHEN SUM(KZal)=0 THEN 0
ELSE ROUND(SUM(PrDoh)/SUM(KZal)*100*(CASE WHEN ID_prd=1 THEN 1 ELSE 4 END),1) END PrStav,
SUM(PrDoh) PrDoh

from VKreditData
where ID_kln=4 and ID_krS IN (81,70) and ID_prd IN (1,2,3,4,5)
group by ID_reg,ID_prd
UNION
select ID_reg, ID_prd,
CASE WHEN ID_prd=1 THEN SUM(KZal)
ELSE SUM(KZal)-SUM(Korrect) END SerZal,
CASE WHEN ID_prd=1 THEN NULL
ELSE SUM(Korrect) END Korrect,
CASE WHEN ID_prd=1 THEN NULL
ELSE SUM(KZal) END KorSerZal,
CASE WHEN SUM(KZal)=0 THEN 0
ELSE ROUND(SUM(PrDoh)/SUM(KZal)*100*(CASE WHEN ID_prd=1 THEN 1 ELSE 4 END),1) END PrStav,
SUM(PrDoh) PrDoh

from VKreditData
where ID_kln=4 and ID_krS=81 and ID_prd IN (1,2,3,4,5)
group by ID_reg,ID_prd
UNION ... и т.д.

SELECT-ы отличаются только в WHERE условиями для ID_krS и ID_kln

Подскажите пожалуйста, целый день с ним мучаюсь .
...
Рейтинг: 0 / 0
05.09.2002, 21:06:16
    #32048594
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
динамически создаваемое VIEW
Вообще-то exec поддерживает конкатенацию переменных, т.е.
exec(@var + @var2 + ...)

только мне совершенно непонятно зачем объединять наборы, которые покрывают друг друга
where ID_kln=4 and ID_krS IN (81,70) and ID_prd IN (1,2,3,4,5)
where ID_kln=4 and ID_krS= 81 and ID_prd IN (1,2,3,4,5)

да еще через UNION, т.е. с удалением повторяющихся записей ?
...
Рейтинг: 0 / 0
06.09.2002, 09:04:34
    #32048630
SandalTree
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
динамически создаваемое VIEW
Первое, что пришло на ум:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE VIEW COLLECT
AS
SELECT *
FROM VIEW1
UNION
SELECT *
FROM VIEW2
UNION
....
UNION
SELECT *
FROM VIEWn

Т.е. создаёшь постоянный вид, а динамические виды (1,2...n) делаешь под него.

А вообще это пожалуй глупая идея и Glory прав, какой смысл тормозить UNION ами если можно правильно сформировать динамическое WHERE
...
Рейтинг: 0 / 0
06.09.2002, 10:22:19
    #32048654
Abu
Abu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
динамически создаваемое VIEW
Дело в том, что каждый SELECT - это строка отчетной формы для различных значений ID_prd, ID_reg. В отчетной форме есть строки соответствующие одному элементу ID_krS (ID_krS=81), а есть суммирующие две или больше строки (krS IN (81,70)), кстати записи не удаляются поскольку они не повторяющиеся (группировка: group by ID_reg,ID_prd) . Как сделать чтобы в даном случае обе эти строки попали в результатирующее VIEW без UNION, не знаю, у меня не получается. Сохранить во VIEW мне хочется (хотя можно сделать вывод во временную таблицу - этот вариант вобщем-то работает) чтобы затем можно было "покрутить" эти данные через VIEW для анализа - по разным ID_reg, ID_prd.
Может, действительно, это "не тот путь"?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / динамически создаваемое VIEW / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]