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

Откуда:
Сообщений: 692
Привет всем!
Прошу подсказать, как можно сгенерировать данный запрос динамически.
В каждой строке "шаг" - с rowbeg по rowend - 6 единиц.
Таких строк может потребоваться на данный момент до 40, в будущем количество может увеличиться.

SELECT     1 AS rowid, 1 AS rowbeg, 6 AS rowend
UNION ALL
SELECT     2 AS rowid, 7 AS rowbeg, 12 AS rowend
UNION ALL
SELECT     3 AS rowid, 13 AS rowbeg, 18 AS rowend
UNION ALL
SELECT     4 AS rowid, 19 AS rowbeg, 24 AS rowend
UNION ALL
SELECT     5 AS rowid, 25 AS rowbeg, 30 AS rowend
UNION ALL
SELECT     6 AS rowid, 31 AS rowbeg, 36 AS rowend
UNION ALL
SELECT     7 AS rowid, 37 AS rowbeg, 42 AS rowend
UNION ALL
SELECT     8 AS rowid, 43 AS rowbeg, 48 AS rowend
UNION ALL
SELECT     9 AS rowid, 49 AS rowbeg, 54 AS rowend
UNION ALL
SELECT    10 AS rowid, 55 AS rowbeg, 60 AS rowend
UNION ALL
SELECT    11 AS rowid, 61 AS rowbeg, 66 AS rowend
UNION ALL
SELECT    12 AS rowid, 67 AS rowbeg, 72 AS rowend
30 авг 12, 10:47    [13086969]     Ответить | Цитировать Сообщить модератору
 Re: динамический запрос  [new]
qwerty112
Guest
;with cte as
(SELECT 1 AS rowid, 1 AS rowbeg, 6 AS rowend 
union all
select rowid+1, rowbeg+6, rowend+6 from cte where rowid<12)

select * from cte 
30 авг 12, 10:51    [13087001]     Ответить | Цитировать Сообщить модератору
 Re: динамический запрос  [new]
ecivgamer
Member

Откуда:
Сообщений: 692
qwerty112, спасибо.
30 авг 12, 11:18    [13087203]     Ответить | Цитировать Сообщить модератору
 Re: динамический запрос  [new]
gang
Member

Откуда:
Сообщений: 1394
+5 коп.
--2005 через cte
set nocount on
declare @n int
set @n=1000; --Требуемое количество строк.
with cte (v) as 
(select 1 v union all select v+1 from cte where v<@n  ) 

select 
--Здесь пишем значения полей
 IDENTITY(int, 1,1) AS id --Identity поле для ключа
,ABS(CAST(NEWID() AS binary(8)) %1000/*maximum*/)+1 as int_value --квази-случайные числа
,dateadd(ss,-CEILING( abs(convert(float,convert(int,convert(varbinary(max),NEWID ())))/50)), GETDATE()) as filed_date --квази-случайные даты
,REPLICATE ('a',40 )+CONVERT(varchar(10),v) as field_varchar --varchar
,REPLICATE ('n',40 )+CONVERT(varchar(10),v) as filed_nvarchar --nvarchar
,REPLICATE ('some words varchar ',1000 )+CONVERT(varchar(10),v) as filed_varchar_max --varchar(max)
,REPLICATE ('some words nvarchar ',1000 )+CONVERT(varchar(10),v) as filed_nvarchar_max --nvarchar(max)
,REPLICATE ('<docXML>'+
'<tag'+CONVERT(varchar(10),v)+'1>'+CONVERT(varchar(10),v)+'1</tag'+CONVERT(varchar(10),v)+'1>'+
'<tag'+CONVERT(varchar(10),v)+'2>'+CONVERT(varchar(10),v)+'2</tag'+CONVERT(varchar(10),v)+'2>'+
'<tag'+CONVERT(varchar(10),v)+'3>'+CONVERT(varchar(10),v)+'3</tag'+CONVERT(varchar(10),v)+'3>'+
'<tag'+CONVERT(varchar(10),v)+'4>'+CONVERT(varchar(10),v)+'4</tag'+CONVERT(varchar(10),v)+'4>'+
'<tag'+CONVERT(varchar(10),v)+'5>'+CONVERT(varchar(10),v)+'5</tag'+CONVERT(varchar(10),v)+'5>'+
'<tag'+CONVERT(varchar(10),v)+'6>'+CONVERT(varchar(10),v)+'6</tag'+CONVERT(varchar(10),v)+'6>'+
'<tag'+CONVERT(varchar(10),v)+'7>'+CONVERT(varchar(10),v)+'7</tag'+CONVERT(varchar(10),v)+'7>'+
'<tag'+CONVERT(varchar(10),v)+'8>'+CONVERT(varchar(10),v)+'8</tag'+CONVERT(varchar(10),v)+'8>'+
'<tag'+CONVERT(varchar(10),v)+'9>'+CONVERT(varchar(10),v)+'9</tag'+CONVERT(varchar(10),v)+'9>'+
'<tag'+CONVERT(varchar(10),v)+'0>'+CONVERT(varchar(10),v)+'0</tag'+CONVERT(varchar(10),v)+'0>'+
'</docXML>',1000) as filed_xml --XML
into newtable 
from cte OPTION (MAXRECURSION 0)
--select * from newtable
--drop table newtable
30 авг 12, 11:59    [13087571]     Ответить | Цитировать Сообщить модератору
 Re: динамический запрос  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
ecivgamer,

select number+1 as rowid,number*6+1 as rowbeg,number*6+6 as rowend  
from master.dbo.spt_values 
where type='P' and number<12
30 авг 12, 12:14    [13087728]     Ответить | Цитировать Сообщить модератору
 Re: динамический запрос  [new]
ecivgamer
Member

Откуда:
Сообщений: 692
Только теперь возникла ситуация, когда нужно сгенерировать больше 100 строк.

Вариант qwerty112 возвращает ошибку:

Msg 530, Level 16, State 1, Line 1
The statement terminated. The maximum recursion 100 has been exhausted before statement completion.


вариант gang не пробовал,

вариант Serg_77m подошел.
3 сен 12, 20:15    [13108397]     Ответить | Цитировать Сообщить модератору
 Re: динамический запрос  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
ecivgamer,

Надо только в конце добавить:
OPTION (MAXRECURSION 0)
3 сен 12, 20:44    [13108471]     Ответить | Цитировать Сообщить модератору
 Re: динамический запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31439
ecivgamer
Привет всем!
Прошу подсказать, как можно сгенерировать данный запрос динамически.
В каждой строке "шаг" - с rowbeg по rowend - 6 единиц.
Таких строк может потребоваться на данный момент до 40, в будущем количество может увеличиться.
А таблицу никак нельзя сделать, это запросы к чужой системе?
3 сен 12, 20:51    [13108485]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить