Как я могу создать несколько представлений в хранимой процедуре? - PullRequest
1 голос
/ 13 апреля 2011

Я хочу создать временную хранимую процедуру для создания нескольких представлений; так как то так:

create proc #t1 as
begin
   create view v1 as select 1 as x
   go
   create view v2 as select 2 as x
end

К сожалению, когда я выполняю это в Microsoft SQL Server 2005, я получаю синтаксическую ошибку в первой строке create view.

Примерно так работает:

create proc #t1 as
begin
   exec('create view v1 as select 1 as x')
   exec('create view v2 as select 2 as x')
end

Однако это кажется ужасным способом делать то, что я хочу.

Так что же не так с первой попыткой и как лучше всего создать несколько представлений в хранимой процедуре?

Ответы [ 3 ]

5 голосов
/ 13 апреля 2011

Вы не можете иметь go внутри хранимой процедуры.Это не команда в SQL, это разделитель между пакетами в SQL Manager, поэтому он разбивает процедуру на два пакета и вызывает синтаксические ошибки, поскольку ни один пакет не является полной командой.

1 голос
/ 14 апреля 2011

Вам не нужно писать полноценный парсер, чтобы сделать эту работу - все, что вам нужно сделать, - это то, что делают инструменты командной строки / SSMS - читать строки из файла и накапливать их в (в .Net этостроитель строк, не могу вспомнить эквивалент в Java), пока не встретится строка, которая начинается со слова GO.Каждый раз, когда вы достигаете этой точки, отправляйте накопленный буфер на SQL Server, а затем очищайте буфер и запускайте его снова.

До тех пор, пока ваш текущий скрипт имеет GO, когда это требуется, вышеприведенное должно работать.

0 голосов
/ 25 апреля 2012

Это легко сделать, используя переменную, назначив представление create для операторов @variable, а затем EXEC (@Variable) внутри процедуры

...