帮忙看下这个存储过程有什么语法错误

tianfu1 2009-07-14 05:30:39
我是第一次写这么复杂的存储过程,存储过程创建成功了,但是执行的时候却提示有语法错误
帮忙看看了
代码如下:


CREATE PROCEDURE GetCompanyInfo --获得查询公司的信息--测试版没有排名
(
@PageSize INT, -- 一页的记录数
@CurrentNum INT, --当前页数
@RecordNum INT OUTPUT -- 总记录数
)
AS

DECLARE @str varchar(400)

SET @str = 'SELECT TOP '+ CAST(@PageSize as varchar(10)) + ' Company,RegisterTime,VisitNum
FROM CompanyInfo,UserInfo
WHERE CompanyInfo.UserID=UserInfo.UserID AND NOT IN
(
SELECT TOP ' + cast(@PageSize * (@CurrentNum-1) as varchar(10))+ 'Company,RegisterTime,VisitNum
FROM CompanyInfo,UserInfo
WHERE CompanyInfo.UserID=UserInfo.UserID ORDER BY UserID DESC
) ORDER BY UserID DESC'

EXEC(@str)

SELECT @CurrentNum = COUNT(*) FROM CompanyInfo

GO

执行语句:
declare @num int
EXEC GetCompanyInfo 30,1,@RecordNum=@num output



错误提示

服务器: 消息 156,级别 15,状态 1,行 3
在关键字 'IN' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 7
在关键字 'ORDER' 附近有语法错误。
...全文
29 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfu1 2009-07-15
  • 打赏
  • 举报
回复
我今天又看了看终于解决了
他提示in附近错误
是我的Not in 语句写错了
应该写成 and UserID not in……

不过还是谢谢大家的热心
linguojin11 2009-07-14
  • 打赏
  • 举报
回复
create table lin(id int ,name varchar(100))
insert into lin select 1,'a'
go
create proc lin_proc
@id int,@name varchar(100) output
as
begin
select @name=name from lin where id=@id
end
go
declare @n varchar(100)
exec lin_proc 1,@name=@n output
print @n

go
drop table lin
drop proc lin_proc
feixianxxx 2009-07-14
  • 打赏
  • 举报
回复
--或者这样 总之你定义有问题
declare @num int output
EXEC GetCompanyInfo 30,1,@num
jwdream2008 2009-07-14
  • 打赏
  • 举报
回复
SET @str = 'SELECT TOP '+ CAST(@PageSize as varchar(10)) + ' Company,RegisterTime,VisitNum
FROM CompanyInfo,UserInfo
WHERE CompanyInfo.UserID=UserInfo.UserID AND NOT Exists
(
SELECT TOP ' + cast(@PageSize * (@CurrentNum-1) as varchar(10))+ 'Company,RegisterTime,VisitNum
FROM CompanyInfo,UserInfo
WHERE CompanyInfo.UserID=UserInfo.UserID ORDER BY UserID DESC
) ORDER BY UserID DESC'
feixianxxx 2009-07-14
  • 打赏
  • 举报
回复
declare @num int output--这要加output
EXEC GetCompanyInfo 30,1,@RecordNum=@num output
jsoner 2009-07-14
  • 打赏
  • 举报
回复
SELECT TOP ' + cast(@PageSize * (@CurrentNum-1) as varchar(10))+ '

为什么 top 'N' ??不行吧.
top @PageSize * (@CurrentNum-1) 不就行了?还有top 字串的?
jwdream2008 2009-07-14
  • 打赏
  • 举报
回复
SET @str = 'SELECT TOP '+ CAST(@PageSize as varchar(10)) + ' Company,RegisterTime,VisitNum
FROM CompanyInfo,UserInfo
WHERE CompanyInfo.UserID=UserInfo.UserID AND NOT IN
(
SELECT TOP ' + cast(@PageSize * (@CurrentNum-1) as varchar(10))+ 'Company,RegisterTime,VisitNum
FROM CompanyInfo,UserInfo
WHERE CompanyInfo.UserID=UserInfo.UserID ORDER BY UserID DESC
) ORDER BY UserID DESC'
缺少表名!
jsoner 2009-07-14
  • 打赏
  • 举报
回复
TOP ' + cast(@PageSize * (@CurrentNum-1) as varchar(10))+ 'Company,
'和Company之间空格

NOT in (子查询不可以ORDER BY)

27,579

社区成员

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

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