Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Kapadastra
Member

Откуда:
Сообщений: 29
Добрый день, появилась задачка. Есть таблица, в полях которой содержится название правила и селект к этому правилу, как выполнить все эти селекты если их кол-во не известно и может меняться, эти селекты работают по union если сделать это вручную. Как пройтись по всем полям и съюнионить))))) ? Спасибо, сильно не пинайте)
11 июл 16, 16:18    [19395898]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
o-o
Guest
Kapadastra
Добрый день, появилась задачка. Есть таблица, в полях которой содержится название правила и селект к этому правилу, как выполнить все эти селекты если их кол-во не известно и может меняться, эти селекты работают по union если сделать это вручную. Как пройтись по всем полям и съюнионить))))) ? Спасибо, сильно не пинайте)

по всем полям или по всем запросам?
"юнионить" можно только одинаковое число полей,
да еще и с приводимыми типами
11 июл 16, 16:24    [19395938]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Kapadastra
Member

Откуда:
Сообщений: 29
o-o,
Вручную они юниотся т.е. и кол-во полей и сами поля одинаковые, суть в том что кол-во таких запросов неизвестно и может меняться...
11 июл 16, 16:37    [19395999]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Kapadastra,

в FAQ есть "Сложение символьных полей в запросе"
11 июл 16, 16:42    [19396032]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Kapadastra
Member

Откуда:
Сообщений: 29
Дедушка,
С полями я понял ;) Спасибо
В результирующем наборе у меня есть несколько селектов в одном поле
select 1
select 2
select 3
как их можно объединить?
Заранее спасибо)
11 июл 16, 17:13    [19396205]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Kapadastra
В результирующем наборе у меня есть несколько селектов в одном поле
select 1
select 2
select 3
как их можно объединить?

они тож через union все отрабатывают?
разделители между ними есть?
11 июл 16, 17:18    [19396232]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
o-o
Guest
создать временную таблицу с 1 полем нужного типа.
курсор по всем строкам таблицы.
в курсоре в динамике выполнять каждый скрипт и инсертить результат во временную таблицу.
11 июл 16, 17:20    [19396242]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31432
Kapadastra
В результирующем наборе у меня есть несколько селектов в одном поле
select 1
select 2
select 3
как их можно объединить?
Каждый select - он находится в одной записи в таблице? Или в одной записи может находиться произвольный текст, с кучей select-ов?
Во втором случае задача сложная, нужен фактически семантический анализатор, ну или какие то чёткие правила формирования текста.
А в первом случае в общем никаких проблем, берёте пример из ФАКа, и модифицируете, что бы в качестве разделителя получился текст "union all"
11 июл 16, 17:24    [19396265]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31432
o-o
создать временную таблицу с 1 полем нужного типа.
курсор по всем строкам таблицы.
в курсоре в динамике выполнять каждый скрипт и инсертить результат во временную таблицу.
ИМХО один запрос будет проще собрать. А если ему нужен именно union, без all...
11 июл 16, 17:26    [19396274]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Kapadastra
Member

Откуда:
Сообщений: 29
Дедушка, Это разные работающие селекты, относительно разные, поля все равно выводят одинаковые, разница в условиях. Когда я их копирую вручную и делаю юнион все работает.
Объединить надо в одну строку добавив между ними UNION .
11 июл 16, 17:27    [19396283]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
o-o
Guest
alexeyvg
o-o
создать временную таблицу с 1 полем нужного типа.
курсор по всем строкам таблицы.
в курсоре в динамике выполнять каждый скрипт и инсертить результат во временную таблицу.
ИМХО один запрос будет проще собрать. А если ему нужен именно union, без all...

а если строк 10000?
сервер не крякнет план строить?
11 июл 16, 17:27    [19396285]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Kapadastra
Member

Откуда:
Сообщений: 29
alexeyvg, все селекты однотипны и возвращают одинаковое кол-во полей, только условия их разные
11 июл 16, 17:28    [19396291]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Kapadastra
Дедушка, Это разные работающие селекты, относительно разные, поля все равно выводят одинаковые, разница в условиях. Когда я их копирую вручную и делаю юнион все работает.
Объединить надо в одну строку добавив между ними UNION .

как у вас select1 отделён от select2 в этом поле (GO, $$$, перевод строки)?
повторяется ли этот разделитель где-то ещё в тексте этого поля?
11 июл 16, 17:30    [19396304]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Kapadastra
Member

Откуда:
Сообщений: 29
Дедушка,
Выглядит примерно так
1 select * from t 1 where s=1
2 select * from t 1 where s=2
3 select * from t 1 where s=3
у них просто разные условия выборки, надо посмотреть все сразу
11 июл 16, 17:33    [19396320]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Kapadastra
Member

Откуда:
Сообщений: 29
Дедушка, Это разные строки
11 июл 16, 17:33    [19396322]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
правильный проходящий.
Guest
Kapadastra
Дедушка, Это разные работающие селекты, относительно разные, поля все равно выводят одинаковые, разница в условиях. Когда я их копирую вручную и делаю юнион все работает.
Объединить надо в одну строку добавив между ними UNION .
Не обязательно тут делать Union, хоть и нужен один результат из всех запросов. Достаточно, как уже намекали, результаты всех запросов складывать в одну таблицу. В качестве примера подсчет количества записей во всех таблицах:
declare @str varchar(max);  
  create table #t (T_Name sysname, cnt int);  
  select   
    @str = replace(  
  	(  
  		select 'insert into #t select '''+TABLE_NAME+''',count(*) from '+TABLE_NAME+char(160) as 'data()'   
  		from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'  
  		for xml path('')  
  	)  
    , char(160), ';')  
   exec (@str)  
   select * from #t  
   drop table #t
Правильная модификация этого скрипта дает нужный вам результат.
11 июл 16, 17:35    [19396324]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
правильный проходящий.
Достаточно, как уже намекали, результаты всех запросов складывать в одну таблицу
у него несколько селектов лежат в одном поле
11 июл 16, 17:38    [19396344]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
правильный проходящий.
Guest
Дедушка
правильный проходящий.
Достаточно, как уже намекали, результаты всех запросов складывать в одну таблицу
у него несколько селектов лежат в одном поле
Он утверждает, что это не так. 19396322|>]
11 июл 16, 17:40    [19396357]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Kapadastra
Member

Откуда:
Сообщений: 29
Дедушка, в одном поле но в разных строках а результат нужен общий этих запросов
11 июл 16, 17:40    [19396358]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Kapadastra
Member

Откуда:
Сообщений: 29
Kapadastra,

Я так всех запутаю
в таблице есть такие строки

Выглядит примерно так
1 select * from t 1 where s=1
2 select * from t 1 where s=2
3 select * from t 1 where s=3

хотелось бы результат в виде select * from t 1 where s=1 union select * from t 1 where s=2 union select * from t 1 where s=3
11 июл 16, 17:46    [19396387]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
o-o
Guest
да мой бог, сколько строк, столько селектов.
сложили каждый в свою строку.
теперь вопрос только в том, собрать ли это в 1 строку с юнионами и 1 раз выполнить
или же по одному выполнять и результат копить.
вроде у него всего 1 таблица во всех запросах, тогда может оно и лучше собрать в 1 запрос.
тка что действительно в FAQ "Сложение символьных полей в запросе",
собрать один селектище и выполнить динамически.
11 июл 16, 17:47    [19396392]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Kapadastra,

сложите своё извращение и выполните
как то так извращённо так :)

DECLARE @Str varchar(MAX) = ''

SELECT TOP 10
	@Str += Name + ' UNION ALL '
FROM sys.objects

SET @Str = SUBSTRING(@Str,0,LEN(@Str)-8)

EXEC (@Str)
11 июл 16, 17:48    [19396401]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
Kapadastra
Member

Откуда:
Сообщений: 29
o-o, Нужно выполнить их все, просто есть нюанс, он добавляются, удаляются и редактируются
11 июл 16, 17:48    [19396405]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
o-o
Guest
TaPaK
Kapadastra,

сложите своё извращение и выполните
как то так извращённо так :)

DECLARE @Str varchar(MAX) = ''

SELECT TOP 10
	@Str += Name + ' UNION ALL '
FROM sys.objects

SET @Str = SUBSTRING(@Str,0,LEN(@Str)-8)

EXEC (@Str)

пускай лучше собирает через xml path.
кстати, ваш код никогда не соберет строку длиной более 8000 символов,
несмотря на красиво заявленное в коде varchar(MAX)
11 июл 16, 17:54    [19396439]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких запросов хранящихся в полях таблицы  [new]
правильный проходящий.
Guest
Kapadastra
Kapadastra,

Я так всех запутаю
в таблице есть такие строки

Выглядит примерно так
1 select * from t 1 where s=1
2 select * from t 1 where s=2
3 select * from t 1 where s=3

хотелось бы результат в виде select * from t 1 where s=1 union select * from t 1 where s=2 union select * from t 1 where s=3
Сударь, я вам уже даже код дал для получения точно такого же результата как и от ваших селектов с юнионами. Что вы так зациклились именно на юнионах? Вам шашечкии или ехать? Вы мой скрипт смотрели?
11 июл 16, 17:55    [19396448]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить