Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!! / 10 сообщений из 10, страница 1 из 1
01.11.2002, 19:02:58
    #32064228
Andrey ...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
Дана таблаца с данными #DATA (SUMMA1 money, FIELD1 varchar(10)) и таблица с условиями #COND (COND varchar(1000)).

Значения:
Insert #DATA (SUMMA1, FIELD1 ) VALUES (5, '1')
Insert #DATA (SUMMA1, FIELD1 ) VALUES (10, '2')
Insert #DATA (SUMMA1, FIELD1 ) VALUES (15, '3')
Insert #DATA (SUMMA1, FIELD1 ) VALUES (20, '4')

INSERT #COND(COND) VALUES (' FIELD1 = ''1'' ')
INSERT #COND(COND) VALUES (' FIELD2 = ''3'' ')

Необходимо без использования курсоров (и циклов !) получить еще одну таблицу #RESULT, содержащую значения из таблицы #DATA, соответствующие условиям из таблицы #COND(COND varchar(1000), SUMMA1 int ) , т. е.:

#RESULT:
( 'FIELD1 = ''1''', 5 )
( 'FIELD1 = ''3''', 15 )
...
Рейтинг: 0 / 0
01.11.2002, 19:24:32
    #32064234
Andrey ...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
SORRY!

Естественно, значения в #COND:

INSERT #COND(COND) VALUES (' FIELD1 = ''1'' ')
INSERT #COND(COND) VALUES (' FIELD1 = ''3'' ')
...
Рейтинг: 0 / 0
01.11.2002, 20:12:30
    #32064253
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
Ну во первых в таблице условий у вас есть значение
INSERT #COND(COND) VALUES (' FIELD2 = ''3'' ') при этом в таблице #DATA у Вас такого поля нет.
Во вторых #DATA и #COND это временные таблицы, и если вы хотите на ходу составлять запросы, то Вам нужно составить строку в которой будет Ваш запрос и исполнить её, при этом откроется новая сессия и временные таблицы созданные в предыдущей сессии видны не будут.
Учтя эти неточности получается следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create table DATA
(
	SUMMA1 integer,
	FIELD1 char ( 1 )
)
create table COND
(
	COND varchar ( 256 )
)
Insert DATA (SUMMA1, FIELD1 ) VALUES ( 5 , '1') 
Insert DATA (SUMMA1, FIELD1 ) VALUES ( 10 , '2') 
Insert DATA (SUMMA1, FIELD1 ) VALUES ( 15 , '3') 
Insert DATA (SUMMA1, FIELD1 ) VALUES ( 20 , '4') 

INSERT COND(COND) VALUES (' FIELD1 = ''1'' ') 
INSERT COND(COND) VALUES (' FIELD1 = ''3'' ') 

declare @execute_string varchar ( 8000 )
declare @cond varchar ( 8000 )
set @cond = ''
select @cond = @cond + COND + 'or' from COND
set @cond = substring(@cond,  1 , (len(@cond) -  3 ))
set @execute_string = 'select FIELD1, SUMMA1 from DATA where' + @cond
execute (@execute_string)
drop table DATA
drop table COND
result:
FIELD1 SUMMA1      
 ------ ----------- 
 
 1        5 
 3        15 

А теперь третье. Не хочу никого обидеть но это получается удаление гланд экстравагантным методом. Может Вам продумать структуру базы, и отказаться от хранения кусков запросов в самой базе?
...
Рейтинг: 0 / 0
01.11.2002, 20:27:46
    #32064258
Andrey ...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
Большое спасибо за ответ, fima

1. На счет FIELD2 я уже исправился
2. Проблема в том, что условия вводятся пользователем и должны использоваться при формировании отчетов. Приведенный мной пример очень простой (в действительности условие может быть на много сложнее и полей в нем участвует много). Приведенный вами вариант не подходит, а вариант с использованием курсоров работает медленно.
3. На счет "удаление гланд экстравагантным методом" вы погорячились, бывают задачи и по круче этой.
...
Рейтинг: 0 / 0
01.11.2002, 20:40:33
    #32064262
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
Задачи бывают и покруче, но решения бывают разные :)) Я сам репортами не занимался и посоветовать не могу, но такое использование базы немного странно... это я Вам точно говорю... например может Вам такое решение подойдет... http://www.sql.ru/faq/faq_topic.aspx?fid=114
...
Рейтинг: 0 / 0
01.11.2002, 21:21:29
    #32064272
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
2 fima
на счет видимости.... ;))
Код: plaintext
1.
2.
3.
select i into #t
from (select  1  as i union all select  2  union all select  3 )a
exec( 'select * from #t' )
drop table #t
...
Рейтинг: 0 / 0
02.11.2002, 09:59:58
    #32064307
Andrey ...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
fima:
В настоящее время задача реализована похожим на предложенный вами способом: есть курсор по таблице условий, в котором динамически создается запрос из таблицы с данными. Проблема в том, что это работает МЕДЛЕННО.

На счет странного использования базы. Посоветуйте, как по-другому решить задачу: есть отчет, содержащий фиксированное число строк и столбцов (пользователь (имеется в виду организация, в которой устанавливается программа) при настройке шаблона может добавить/удалить строки). Каждый пользователь рассчитывает каждую ячейку отчета по-своему. Для этого на генераторе запросов он формирует запрос (результат - таблица с данными). После этого на основе полей полученного запроса формируются условия на расчет значений каждой ячейки отчета.
Если кто-то делал что-нибудь подобное, поделитесь опытом. Буду очень признателен за любые советы и предложения.

PS: я умею работать с временными таблицами, поэтому прошу не уделять внимания вопросам видимости и т. п.
...
Рейтинг: 0 / 0
02.11.2002, 12:54:28
    #32064327
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
ну и приведите пример ваших таблиц и условий....
...
Рейтинг: 0 / 0
04.11.2002, 10:12:41
    #32064437
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
Действительно, таблички и условия обскажите... Кстати насчет видимости... правда видит!!! :)) Вот ведь, меняется SQL Server... 2000 это Вам не 6,5...
...
Рейтинг: 0 / 0
04.11.2002, 10:26:48
    #32064443
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
если у Вас есть таблица с условиями, то что мешает собирать условия в одну переменную, а затем выполнять exec?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare @conds nvarchar( 4000 )

select @conds = isnull(@conds + ' and ' + COND, COND)
from #COND
where PrimaryKey = @PrimaryKey

exec (@query + @conds)


только есть одно НО в таком подходе... условия очень быстро наберут размер в 4000 символов, а затем начнутся танцы с бубном...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!! / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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