关于SQL SERVER存储过程中创建视图

有一段十几行代码的SQL语句,用于创建一个视图,在查询分析器里可以正常运行,可以得到结果,但是在存储过程里用变量的方式,如createproc###asdeclare@s... 有一段十几行代码的SQL语句,用于创建一个视图,在查询分析器里可以正常运行,可以得到结果,
但是在存储过程里用变量的方式,如
create proc ### as
declare @sqlstr varchar(255)
select @sqlstr='
if exists (select * from sysobjects where name='***'and xtyp='v')
drop view ***
create view *** as
select A.xh,A.xm,sum(case when A.zy =B.value then B.code else 0) code
from A,B group by A.xh,A.xm
'
exec(@sqlstr)
go
却老出错误,说对象B无效.
在查询分析器里可以运行的啊.
这是为什么呢.
会不会是代码中间的空格问题还是什么的.
在存储过程里创建视图有没有什么规则什么的.
请高手帮忙解决下吧.谢谢 了
很急很急!
展开
 我来答
突击手觅患
2009-12-16 · TA获得超过962个赞
知道小有建树答主
回答量:240
采纳率:0%
帮助的人:296万
展开全部
SQL SERVER中可以在存储过程中创建视图,但要用动态SQL来执行。
create view view_name
as
...
不能直接使用, 可以改为exec('create view view_name
as
...').

你的可以改成
create proc ### as
begin
if exists (select * from sysobjects where name='***'and xtyp='v')
drop view ***;

exec('create view *** as
select A.xh,A.xm,sum(case when A.zy =B.value then B.code else 0) code
from A,B group by A.xh,A.xm
')
end
这样改应该也可以
create proc ### as
declare @sqlstr varchar(255)
select @sqlstr='
if exists (select * from sysobjects where name=''***''and xtyp=''v'')
drop view ***;
create view *** as
select A.xh,A.xm,sum(case when A.zy =B.value then B.code else 0) code
from A,B group by A.xh,A.xm
'
exec(@sqlstr)
go
21147813
2009-12-15 · TA获得超过364个赞
知道小有建树答主
回答量:400
采纳率:0%
帮助的人:0
展开全部
汗。。这 你太想当然了吧

为什么不直接

create proc ### as
declare @sqlstr varchar(255)
if exists (select * from sysobjects where name='***'and xtyp='v')
drop view ***
create view *** as
select A.xh,A.xm,sum(case when A.zy =B.value then B.code else 0) code
from A,B group by A.xh,A.xm

go

PS。出现那个 对象B无效 是因为 exec(@sqlstr)这里,sqlstr是放在临时域中执行的,已经不在你当前这个域中了 所以就找不到b啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sallyyuhua
2009-12-15 · 超过12用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:27.9万
展开全部
把SQL语句提出来去SQL里面运行一下看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式