我想创建一个临时存储过程来创建多个视图;所以像这样:
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
然而,这似乎是一种做我想做的事情的可怕方式。
第一次尝试出了什么问题,在存储过程中创建多个视图的最佳方法是什么?
答案 0 :(得分:5)
存储过程中不能包含go
。它不是SQL中的命令,它是SQL管理器中批处理之间的分隔符,因此它会将过程分成两批并导致语法错误,因为两个批处理都不是完整的命令。
答案 1 :(得分:1)
你不必编写一个完整的解析器来完成这项工作 - 所有你需要做的就是命令行工具/ SSMS所做的 - 从文件中读取行并将它们累积在一个(在.Net中,它是一个字符串构建器,不能记住Java中的等价物,直到你遇到一个以单词GO
开头的行。每次到达该点,将累积的缓冲区发送到SQL Server,然后清空缓冲区并重新开始。
只要您的当前脚本在需要时都有GO
,上述内容就可以正常运行。
答案 2 :(得分:0)
使用变量很容易实现这一点,将创建视图分配给过程中的@variable然后EXEC(@Variable)语句