Wpisywanie ilości wyszukiwanych rekordow

0

Witam,
Mam następujący problem:
Chcę zrobić coś takiego, że w mojej bazie danych sql server mam wygenerowac tabele z taka ilością rekordów jaka wpisze z palca.
W C++ było cos takiego jak cin count, chodzi mi o cos podobnego jest taka mozliwosc?

0

https://www.mssqltips.com/sqlservertip/3157/different-ways-to-get-random-data-for-sql-server-data-sampling/

Możesz napisać sobie własną procedurę, które wygeneruje losowe dane do tabeli. Ewentualnie wprowadzić losowe dane generując je po stronie aplikacji łączącej się z systemem zarządzania bazami danych.

0

tutaj masz opis jak wygenerować tabelę i wrzucić odpowiednią ilość rekordów za pomocą pętli WHILE
http://anonco.pl/tworzymy-swoja-testowa-baze-danych-1mln-rekordow-sql-server/

0

@KiK:, gdybyś powiedział, że pod wskazanym przez Ciebie linkiem jest jak korzystać z IF i WHILE, to byłoby OK. Ale pod tym linkiem jest jak NIE wrzucać do bazy 1 mln rekordów.
Takiej ilości rekordów NIE wrzuca się INSERTEM, a jeśli już to na pewno nie pojedynczym INSERTEM. Tam gdzies na obrazku widać, ile to trwało... ponad 13 minut.
Poniższe zapytanie (na #postgreSQL) wrzuca 1 mln rekordów (takich samych jak Twoje) w 4 sekundy. Tyle mogę poczekać.

insert into myTab
select id, orderdate::date, to_char(orderdate, 'ddd')::int::text || to_char(orderdate, '/yyyy') , positionsnumber from (
select 
	generate_series(1,1000000) id , 
	generate_series('1900-01-01'::date, '2017-12-31'::date, '1 day') orderdate,
	generate_series(1,20) positionsnumber
) x 
limit 1000000

Coś podobnego opisałem niedawno na mikroblogu.

1

@Marcin.Miga: fajnie, że pokazujesz nam co potrafi postgreSQL, ale my tu w świecie MS nie mamy tak bogato ;)
@KiK nie wiem czy masz coś wspólnego z tym zalinkowanym artem, ale jego największą słabością jest to że autor nie trzyma się własnych założeń:

Pole OrderDate będzie zawierało datę zamówienia ale z przedziału od 1990-01-01 do 2017-12-31 i będziemy je nadawać od daty początkowej, zwiększając w każdym rekordzie o jeden dzień. Jak dojdziemy do daty końcowej to wracamy do daty początkowej.

Po czym skrypt dodaje od daty 1900-01-01...

Ja jednak zawsze stoje na stanowisku, że jak wchodzą pętle/kursory, to znaczy że coś poszło nie tak, SQL to język operacji na danych, a nie do pisania programów, nie mam ochoty sprawdzać ile to potrwa u mnie, ale takie zapytanie, dające dokładnie to co w/w artykule:

--to cte jest z SO: http://stackoverflow.com/questions/1393951/what-is-the-best-way-to-create-and-populate-a-numbers-table
WITH
  Pass0 as (select 1 as C union all select 1), --2 rows
  Pass1 as (select 1 as C from Pass0 as A, Pass0 as B),--4 rows
  Pass2 as (select 1 as C from Pass1 as A, Pass1 as B),--16 rows
  Pass3 as (select 1 as C from Pass2 as A, Pass2 as B),--256 rows
  Pass4 as (select 1 as C from Pass3 as A, Pass3 as B),--65536 rows
  Pass5 as (select 1 as C from Pass4 as A, Pass4 as B),--4,294,967,296 rows
  Tally as (select row_number() over(order by C) as i from Pass5)

insert into mytab
SELECT 
	i id
	,dateadd(d,case when i > 10227 then (i % 10227)  else i end,'1989-12-31') OrderDate
	,convert(varchar(2),case when i > 20 then i % 20 + 1 else i end) + '/' + convert(varchar(4),year(dateadd(d,case when i > 10227 then (i % 10227)  else i end,'1989-12-31'))) OrderNumber
	,case when i > 20 then i % 20 + 1 else i end OrderPositions
FROM 
	tally 
where 
	i <=1000000
OPTION (MAXRECURSION 0)

Trwa 11s, nie pobiłem @Marcin.Miga, ale on ma zapewne lepszy sprzęt ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.