Oracle
There is a simple and efficient way in Oracle to generate arbitrary number of rows and a sequence of integer numbers. The trick is to (ab)use Oracle's "connect by" clause. From the integer sequence, it is trivial to derive other sequential data, such as datetime or varchar. Here is an example,
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
define row_count = "100" | |
select | |
level as s, | |
to_date((2000+level)*10000 + 0101, 'yyyymmdd') as d, | |
chr(level) as c | |
from dual | |
connect by level <= &row_count; |
SQL Server
SQL Server doesn't support "connect by" clause. However, you can use recursive CTE (common table expression) to get similar results, albeit more verbosely. Here is the same example in T-SQL,
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare @row_count int = 100; | |
with seq (s, d, c) as ( | |
select | |
1 as s, | |
cast('2000-01-01' as datetime) as d, | |
char(1) as c | |
union all | |
select | |
s + 1, | |
dateadd(year, 1, d), | |
char(s + 1) | |
from seq | |
where s < @row_count | |
) | |
select * from seq; |