sqlserver 存储过程错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver 存储过程错误相关的知识,希望对你有一定的参考价值。

use HotelManage
go
if exists(select name from sysobjects where name='Room_Find')
drop proc Room_Find
go
create proc Room_Find @Order varchar(10) , @FloorId int
as
if (@FloorId>0)
begin
select * from Room where FloorID=@FloorId
end
else
begin
select * from Room order by @Order
end
go
执行后会出现
由 ORDER BY 编号 1 标识的 SELECT 项包含一个变量,作为标识列位置的表达式的一部分。按照引用列名的表达式排序时,只允许使用变量。
我这已经声明的变量了啊,怎么会这样??

参考技术A 用动态sql吧。排序列里面不允许使用变量的。
DECLARE @SQL VARCHar(1000)
set @sql='select * from Room order by ' + @Order
exec (@sql)
参考技术B order by 后面应该写一个字段名,不能写变量或者是值 参考技术C 只能order by 列,或列的一部分
不能order by 一个变量.
参考技术D DECLARE @SQL VARCHar(1000)
set @sql='select * from Room where FloorID='+@FloorId
exec (@sql)追问

我感觉是 select * from Room order by @Order 这句话错了啊
您的那个是怎么回事??

追答

带有变量的SQL不能直接运行,必须使用扩展SQL即EXEC SQL,

本回答被提问者采纳

以上是关于sqlserver 存储过程错误的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver 存储过程调用报错

一个sqlserver存储过程,创建时没报错,执行时有错误

sqlserver 怎么更新存储过程

sqlserver 存储过程

sql server中怎样创建保存数据的存储过程

sqlserver 存储过程