从存储过程中的视图中选择时不能使用 ORDER BY

Posted

技术标签:

【中文标题】从存储过程中的视图中选择时不能使用 ORDER BY【英文标题】:Can't use ORDER BY when SELECTing from a view in a stored procedure 【发布时间】:2012-08-26 09:37:31 【问题描述】:

我有一个视图,虽然我可以执行此语句而不会出现任何错误:

SELECT * from vwShippingNoticeBase
order by InvoiceNum

当我尝试用这个完全相同的语句创建一个存储过程时,我得到一个错误:

create PROCEDURE [dbo].[upSELECT_shippingNoticeOrderByInvoiceNum]
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM vwShippingNoticeBase
order by invoiceNum

错误:

消息 102,级别 15,状态 1,程序 upSELECT_shippingNoticeByDateRange,第 7 行 'invoiceNum' 附近的语法不正确。

很奇怪!

【问题讨论】:

【参考方案1】:

如何将END 添加到您的存储过程中......

CREAT PROCEDURE [dbo].[upSELECT_shippingNoticeOrderByInvoiceNum]
AS
BEGIN
   SET NOCOUNT ON;

   SELECT * FROM vwShippingNoticeBase
   ORDER BY invoiceNum
END   -- <<<==== you're missing the END for the BEGIN you have!

【讨论】:

天哪。谢谢!我已经注释掉了一些行并且没有将我的 END 移回顶部。非常感谢! @MaxHodges:只要有足够的眼球,所有的错误都会变得浅薄:-) 给出的错误信息稍微多一些,所有错误都在浅层之前;) @MaxHodges: 嗯 - 消息绝对 100% 正确 - 你的语法无效,在 InvoiceNum 附近 - 你错过了 END :-) 写作 good 错误消息比编程本身更像是一门艺术......

以上是关于从存储过程中的视图中选择时不能使用 ORDER BY的主要内容,如果未能解决你的问题,请参考以下文章

存储过程 - 在 ORDER BY 列表位置 2 中遇到常量表达式

存储过程,并从两个几乎相同的视图中选择

SQL中的存储过程,函数,视图有啥区别?

从存储过程刷新物化视图时出错(不是有效月份)

视图和存储过程的不同结果

mysql数据库从删库到跑路之mysql:视图触发器事务存储过程函数