пятница, 25 мая 2012 г. - www.msmirnov.ru

Желаемый синтаксический сахар в Microsoft SQL Server

Версия MS SQL 2012, конечно, несет много интересных доработок.

Однако, меня давно интересует, почему в SQL Server'е не добавить немного синтаксического сахара относительно курсоров.

В самом деле, если бы у нас была возможность пробегаться по курсорам при помощи конструкций примерно следующего вида, то было бы намного проще:

foreach MyRow in (select * from MyTable)
    begin
        select MyField from MyRow
    end


Сейчас, для того, чтобы сделать тоже самое, нам приходится постоянно набирать куски кода вроде этого:

declare @MyField int
   
declare cur cursor for
select MyField from MyTable

open cur

fetch next from cur into @MyField

while @@FETCH_STATUS = 0
    begin
        select
@MyField
       
        fetch next from cur into @MyField
    end

close cur
deallocate cur

Который по своему функционалу аналогичен предыдущему, но как видно, намного длиннее.

Я понимаю, что есть разные виды курсоров. способы их обхода и пр.
Но все-же для наиболее часто употребляемого случая - когда мы используем локальный курс с движением только вперед - такой синтаксический сахар был бы очень полезен.

Кроме того, его можно было бы дополнить и различными настройками курсора, если уж это может кому-то потребоваться.

Прощу представителей компании Microsoft, в случае прочтения данного сообщения, считать это моим личным пожеланиям относительно новой функциональности в дальнейших версиях SQL Server.
Мой сайт - www.msmirnov.ru

4 комментария:

  1. Чем меньше SQL-я, тем лучше!

    ОтветитьУдалить
  2. Я бы сказал, чем меньше копи-паста, тем лучше :)

    ОтветитьУдалить
  3. Ещё на курсах мелкомягких в 99-м, "представитель" сей компании говорил типа следующее - курсоры это типf тяжелая артилерия, в жизни встречается в базах с непродуманной структурой. :)

    ОтветитьУдалить
  4. Ню-ню.

    Мне кажется, что этот представитель не особо представлял о чем говорит :)
    И видимо, просто хотел продемонстрировать свою крутость :)

    ОтветитьУдалить