|
|
|
Цикл посредством T-SQL
|
|||
|---|---|---|---|
|
#18+
Добрый день! Может ли кто нибудь подсказать мне такую вещь , возможно ли посредством языка SQL создать цикл. К примеру есть табл. и мне нужно просканировать в ней записи , сразу скажу записей более 1 000 000 и значений совпадающих прилично. Мне необходимо создать цикл опроса этих записей . Типа как на паскале - for i:=1 to 1000000 do ...... Подскажите кто знает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2002, 04:41 |
|
||
|
Цикл посредством T-SQL
|
|||
|---|---|---|---|
|
#18+
Сделать цикл по записям можно, используя курсоры. Но прежде чем браться за них, лучше раскажите подробнее про задачу. В большинстве случаев можно прекрасно обойтись без них, это упростит код и повысит его производительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2002, 06:20 |
|
||
|
Цикл посредством T-SQL
|
|||
|---|---|---|---|
|
#18+
GreenSunrise : вообщем задача такая - есть SQL Server и Delphi. На SQL Server'e есть БД а в ней табл. ( в ней хранятся данные о человеке , т.е. ФИО , дата рождения и т.д.) Мне посредством Delphi - ADOQuery - скрипт на T-SQL(производящий поиск человека по дню его рождения - на сегодняшний день я уже написал , но проблема в том что он сравнивает с настоящим - днем , месяцем и самое плохое - годом, т.е. он показывает человека с сегодняшней датой рождения - типа 6.02.2002 , попытался я оставить только день и месяц - встала проблема - как просканировать - не только по этому году но и с 1940 по 2002 , попытался в дельфи зациклить этот Query - вообще глюки пошли. Вот я и ищу выход - цикл посредством T-SQL , я знаю что там есть такой оператор For , только как его использовать не могу понять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2002, 06:50 |
|
||
|
Цикл посредством T-SQL
|
|||
|---|---|---|---|
|
#18+
Цикл здесь и не нужен совершенно: create table a ( pk int identity(1,1) not null, FIO nvarchar(100) not null, BirthDate smalldatetime not null ) go insert into a (FIO,BirthDate) values ('Иванов Иван Иванович','1965-02-14') insert into a (FIO,BirthDate) values ('Петров Петр Петрович','1968-02-14') insert into a (FIO,BirthDate) values ('Сидоров Иван Петрович','1944-06-30') insert into a (FIO,BirthDate) values ('Сидоров Петр Иванович','1939-10-10') go create procedure BirthDateSeek @searchdate smalldatetime As Select pk,FIO,BirthDate from a where MONTH(@searchdate)=MONTH(BirthDate) AND DAY(@searchdate)=DAY(BirthDate) Go exec BirthDateSeek '2002-02-14' exec BirthDateSeek '2002-06-30' exec BirthDateSeek '1900-01-01' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2002, 07:58 |
|
||
|
Цикл посредством T-SQL
|
|||
|---|---|---|---|
|
#18+
в дополнении: если действительно 1 млн записей, то поиск может занимать довольно много времени - т.к. индекс здесь не используется, нужен полный перебор. Что бы избежать этого можно ввести еще одну колонку и хранить там дату и день рождения за какой-то определённый год. По этой колонке можно построить индекс и тогда поиск будет мгновенный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2002, 08:11 |
|
||
|
Цикл посредством T-SQL
|
|||
|---|---|---|---|
|
#18+
Спасибо большое Александр за совет , вроде как действительно все оказалось намного проще чем я думал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2002, 10:36 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32022273&tid=1823999]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 395ms |

| 0 / 0 |
