如何在存储过程中创建多个视图?

时间:2011-04-13 08:45:05

标签: sql sql-server-2005 tsql stored-procedures ddl

我想创建一个临时存储过程来创建多个视图;所以像这样:

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 个答案:

答案 0 :(得分:5)

存储过程中不能包含go。它不是SQL中的命令,它是SQL管理器中批处理之间的分隔符,因此它会将过程分成两批并导致语法错误,因为两个批处理都不是完整的命令。

答案 1 :(得分:1)

你不必编写一个完整的解析器来完成这项工作 - 所有你需要做的就是命令行工具/ SSMS所做的 - 从文件中读取行并将它们累积在一个(在.Net中,它是一个字符串构建器,不能记住Java中的等价物,直到你遇到一个以单词GO开头的行。每次到达该点,将累积的缓冲区发送到SQL Server,然后清空缓冲区并重新开始。

只要您的当前脚本在需要时都有GO,上述内容就可以正常运行。

答案 2 :(得分:0)

使用变量很容易实现这一点,将创建视图分配给过程中的@variable然后EXEC(@Variable)语句