Incorrect syntax near the keyword 'view'.

振乾 2014-11-03 04:20:53

if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vwTbllog]') and OBJECTPROPERTY(id, N'IsView') = 1)
begin
create view vwTbllog as
(select id,datecreated,errorcode as code,level,category,source,message,exception,stacktrace,userid from tbllog)
end
go


执行上述 sql时出现错误如下:

Server: Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'view'.


使用的是SqlServer2000数据库,
目的很简单,就是判断是否存在 xxx视图,
不存在的话,则创建。
...全文
456 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
道玄希言 2014-11-10
  • 打赏
  • 举报
回复
引用 9 楼 Tiger_Zhao 的回复:
看到邀请怎么进贴子的?我点邀请根本没有跳转,只能一律无视了。
我这可以点第一个的 “…………邀请…………” 跳转到一条写明了”邀请者帖子标题的详细通知,再点帖子标题名称才会进到帖子里面
Tiger_Zhao 2014-11-04
  • 打赏
  • 举报
回复
真要管好数据库的版本,你得在某个表中记个版本号。
然后哪个版本号该调用哪个脚本,都是有规矩的。
如果要靠判断对象是否存在,说明你根本连上个版本是否应该有这个对象都没能控制好。

又,请问#8:看到邀请怎么进贴子的?我点邀请根本没有跳转,只能一律无视了。
  • 打赏
  • 举报
回复
有几个邀请进来,说实话,觉得挺不好意思,我对数据库不是很理解,回答几个T-SQL语句还行,对于这个楼上的几位已经给出答案了,我也想不出什么好的方法,实在抱歉
还在加载中灬 2014-11-03
  • 打赏
  • 举报
回复
创建/修改 视图/存储过程 不让你放到 IF的里面的,死了这条心吧 另外,视图/存储过程通常为了确保执行两次不出错,也就确认存不存在,存就删了重建,不存在刚好也不删,刚好无事~ 它们又包含实际有用数据,删了重建有什么关系
中国风 2014-11-03
  • 打赏
  • 举报
回复
用"("用软件不好格式化,通常是不化蛇填足,多此一举 以下这段不用分批(Go)处理时,需要用动态语句执行,如:4楼格式
CREATE VIEW vwTbllog 
AS 
SELECT  id
       ,datecreated
       ,errorcode AS code
       ,level
       ,category
       ,source
       ,message
       ,exception
       ,stacktrace
       ,userid
FROM    tbllog
中国风 2014-11-03
  • 打赏
  • 举报
回复
把"("去掉
中国风 2014-11-03
  • 打赏
  • 举报
回复
IF OBJECT_ID('vwTbllog', N'V') IS NOT NULL
  EXEC(N'CREATE VIEW vwTbllog AS 
SELECT id,datecreated,errorcode AS code,level,category,source,message,exception,stacktrace,userid FROM tbllog')
Tiger_Zhao 2014-11-03
  • 打赏
  • 举报
回复
存在不一定正确,所以删除重建最保险。
振乾 2014-11-03
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
[Quote=MSDN:]CREATE VIEW 必须是查询批处理中的第一条语句。[/Quote] 所以标准做法做法是
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vwTbllog]') and OBJECTPROPERTY(id, N'IsView') = 1) 
    DROP VIEW vwTbllog
GO
create view vwTbllog as 
    (select id,datecreated,errorcode as code,level,category,source,message,exception,stacktrace,userid from tbllog)
go
这样确实可以。 我觉得这是SqlServer的一个bug, 我不想删除后再创建,只想在它不存在的情况下创建。
Tiger_Zhao 2014-11-03
  • 打赏
  • 举报
回复
[Quote=MSDN:]CREATE VIEW 必须是查询批处理中的第一条语句。[/Quote]
所以标准做法做法是
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vwTbllog]') and OBJECTPROPERTY(id, N'IsView') = 1) 
DROP VIEW vwTbllog
GO
create view vwTbllog as
(select id,datecreated,errorcode as code,level,category,source,message,exception,stacktrace,userid from tbllog)
go





27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧