使用sql查询视图时出错

gwins 2010-07-17 11:03:49
创建的视图
Create View V_Index
As
select id,Title from News where datediff(day,AddTime,getdate())< 30 order by id desc

当使用SQL语句查询这个视图时会提示出错,SQL语句如下:
Sql="select * from V_Index order by id desc"

Sql="select id,Title from V_Index order by id desc"

这两种写法都提示错误结果:查询数据的时候发现错误。请问是什么原因?
...全文
250 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oraclers 2010-07-17
  • 打赏
  • 举报
回复
如果是MS SQL服务器,在创建视图时使用了ORDER BY子句的话,在前面是要用TOP 的,否则会报错。把建视图语句改为如下试试:

Create View V_Index
As
select Top 100 Percent id,Title
from News
where datediff(day,AddTime,getdate())< 30
order by id desc

htl258_Tony 2010-07-17
  • 打赏
  • 举报
回复
提示:
消息 1033,级别 15,状态 1,过程 V_Index,第 3 行
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
htl258_Tony 2010-07-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gwins 的回复:]
视图已经创建成功的,打开并能看到里面是有数据的,难道是创建视图是写法错了?
[/Quote]
是的,你那段创建视图的代码在我SQL2008上编译无法通过。
javalearner2006 2010-07-17
  • 打赏
  • 举报
回复
CREATE VIEW V_Index
AS
SELECT top 999999999999 id, Title
FROM News
WHERE DATEDIFF(DAY, AddTime, GETDATE())<30
GO

如果你一定要用order by 的话,试试用top,很多DBMS是视图不支持order by 语句的
gwins 2010-07-17
  • 打赏
  • 举报
回复
视图已经创建成功的,打开并能看到里面是有数据的,难道是创建视图是写法错了?
htl258_Tony 2010-07-17
  • 打赏
  • 举报
回复
CREATE VIEW V_Index
AS
SELECT id, Title
FROM News
WHERE DATEDIFF(DAY, AddTime, GETDATE())<30
GO

34,835

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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