powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
10 сообщений из 10, страница 1 из 1
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
    #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
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
    #32064234
Andrey ...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SORRY!

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

INSERT #COND(COND) VALUES (' FIELD1 = ''1'' ')
INSERT #COND(COND) VALUES (' FIELD1 = ''3'' ')
...
Рейтинг: 0 / 0
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
    #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
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
    #32064258
Andrey ...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за ответ, fima

1. На счет FIELD2 я уже исправился
2. Проблема в том, что условия вводятся пользователем и должны использоваться при формировании отчетов. Приведенный мной пример очень простой (в действительности условие может быть на много сложнее и полей в нем участвует много). Приведенный вами вариант не подходит, а вариант с использованием курсоров работает медленно.
3. На счет "удаление гланд экстравагантным методом" вы погорячились, бывают задачи и по круче этой.
...
Рейтинг: 0 / 0
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
    #32064262
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачи бывают и покруче, но решения бывают разные :)) Я сам репортами не занимался и посоветовать не могу, но такое использование базы немного странно... это я Вам точно говорю... например может Вам такое решение подойдет... http://www.sql.ru/faq/faq_topic.aspx?fid=114
...
Рейтинг: 0 / 0
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
    #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
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
    #32064307
Andrey ...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fima:
В настоящее время задача реализована похожим на предложенный вами способом: есть курсор по таблице условий, в котором динамически создается запрос из таблицы с данными. Проблема в том, что это работает МЕДЛЕННО.

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

PS: я умею работать с временными таблицами, поэтому прошу не уделять внимания вопросам видимости и т. п.
...
Рейтинг: 0 / 0
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
    #32064327
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и приведите пример ваших таблиц и условий....
...
Рейтинг: 0 / 0
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
    #32064437
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, таблички и условия обскажите... Кстати насчет видимости... правда видит!!! :)) Вот ведь, меняется SQL Server... 2000 это Вам не 6,5...
...
Рейтинг: 0 / 0
Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
    #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
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос из таблицы, условие к которому находится в другой таблице БЕЗ КУРСОРОВ!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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