اول: در خصوص ساخت شمارنده در اس کیو ال،
روش ریکرسیو:
declare @from int = 0
declare @to int = 5
;with CTE as (
select @from K
union all
select K +1
from CTE
where K < @to
)
select *
from CTE
option (maxrecursion 0)
روش استفاده از جداول بزرگ:
declare @from int = 0
declare @to int = 5
select top (@to -@from +1) ROW_NUMBER() over(order by (select 1)) +@from -1 K
from sys.objects
یا هر جدول دیگه ای که دارید، یا حتی کراس جوین یه جدول روی خودش، این روش برای تعداد کوچیک خوبه
روش آیدنتیتی:
declare @from int = 0
declare @to int = 5
declare @T table(K int identity(1, 1))
insert into @T DEFAULT VALUES
WHILE SCOPE_IDENTITY() < 100
INSERT @T DEFAULT VALUES
select *
from @T
روش های دیگه ای هم هست برای ساخت سکوئنس،
حالا شما سکوئنس رو دارید، مثلا در جدول T
می تونید اگر این کارها رو زیاد انجام می دید، یک جدول تحت همین نام بطور دائم درست کنید و ازش استفاده کنید. البته باز هم بستگی داره به پرفورمنس شما.
INSERT INTO tblOutput (FTime) select K from T
مثلا همین کد با استفاده از روش اول:
declare @from int = 0
declare @to int = 5
;with CTE as (
select @from K
union all
select K +1
from CTE
where K < @to
)
INSERT INTO tblOutput (FTime)
select K
from CTE
option (maxrecursion 0)
برای قسمت دوم هم فرض می گیرم که FValue و FColor اسامی فیلد های جدول T2 باشند، که ID فیلدی در اونه که ترتیب ایندکس ها توشه (در حال حاضر فکر کنم آرایه گرفتید)
declare @from int = 0
declare @to int = 5
;with CTE as (
select @from K
union all
select K +1
from CTE
where K < @to
)
UPDATE T
SET FName = T2.FValue + T2.FColor
from tblOutput T
join T2 on T.FTime = T2.ID
join CTE on T.FTime = K
option (maxrecursion 0)
چیزی شبیه به این می شه.
فیلد ها رو خودتون جایگذاری کنید.