T-SQL – generowanie zbioru kolejnych liczb całkowitych

2013-05-08

Często podczas programowania w T-SQL pojawia się potrzeba skorzystania ze zbioru kolejnych liczb całkowitych z określonego zakresu. SQL Server nie posiada gotowej tabeli zawierającej takie dane, pozostaje opracowanie własnego rozwiązania. Poniżej znajdują się trzy przykłady kodu generującego zbiór kolejnych liczb całkowitych z zakresu od 1 do 195. Skrypty nie korzystają z żadnych obiektów bazy danych (tabele systemowe, widoki), nie opierają się również na pętli while co jest częstym ale mało wydajnym podejściem.

Skrypt 1:

with Numbers
as
(
	select 1 as Number
	union all
	select Number + 1 from Numbers where Number < 195
)
select Number from Numbers option (maxrecursion 195)

Skrypt 2:

select top 195 (a * 10 + b) as Number
from
(
	values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
		(11),(12),(13),(14),(15),(16),(17),(18),(19)
) as A(a),
(
	values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)
) as B(b)
order by 1

Skrypt 3:

with Numbers
as
(
	select a
	from
	(
		values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)
	) as A(a)
)
select top 195 row_number() over(order by @@spid) as Number
from Numbers as a, Numbers as b, Numbers as c

W kolejnym wpisie pokażę kilka przykładów zastosowania wygenerowanego w ten sposób zbioru liczb do rozwiązania określonych problemów.

Reklamy

Posted on 2013-05-08, in SQL Server and tagged , , , . Bookmark the permalink. Dodaj komentarz.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: