【挑战高手】存储过程中提示某变量附近有语法错误 的问题!

windows2008 2007-11-19 04:47:49
我的一个存储过程有如下语句:
declare @License_Num int --用户数
declare @User_No int --用户编号
declare @User_No_TMP int --用户编号TMP
declare @License_No varchar(128) --License序列号
declare @Entp_ID varchar(50)
declare @UName varchar(50)
declare @License_Count int
set @License_Num=12
set @UName='yanxr'
set @Entp_ID='10000000001'
SELECT @User_No_TMP=User_No FROM Tab_UserInfor WHERE User_No=@UName AND User_No IN(SELECT TOP @License_Num User_No FROM Tab_UserInfor WHERE Entp_ID=@Entp_ID)

提示:'@License_Num' 附近有语法错误。
@License_Num是动态选取前N个数据的变量,到底是什么问题呢?
还有就是@User_No_TMP= 这个地方提示 '=' 附近有语法错误。
怎么解决呢?
先谢谢各位大虾啊~~
...全文
117 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dapei_712 2007-11-20
  • 打赏
  • 举报
回复
不要用top(不支持变量参数)实现。
换SET ROWCOUNT @License_Num好了
——上述的几个做法在2000里都会有问题
hamburger 2007-11-20
  • 打赏
  • 举报
回复
SELECT @User_No_TMP=User_No FROM Tab_UserInfor WHERE User_No=@UName AND User_No IN(SELECT TOP (@License_Num) User_No FROM Tab_UserInfor WHERE Entp_ID=@Entp_ID)
把TOP加上括號就行了吧

cxmcxm 2007-11-19
  • 打赏
  • 举报
回复
sql2000不支持变量的top 语句
windows2008 2007-11-19
  • 打赏
  • 举报
回复
TO:≮西门潇洒≯

执行时返回这样的错误:
服务器: 消息 245,级别 16,状态 1,行 13
将 varchar 值 'SELECT ' 转换为数据类型为 int 的列时发生语法错误。
ruihuahan 2007-11-19
  • 打赏
  • 举报
回复
使用dynamic sql
symbol441 2007-11-19
  • 打赏
  • 举报
回复
参考



declare @License_Num int --用户数
declare @User_No int --用户编号
declare @User_No_TMP int --用户编号TMP
declare @License_No varchar(128) --License序列号
declare @Entp_ID varchar(50)
declare @UName varchar(50)
declare @License_Count int
set @License_Num=12
set @UName= 'yanxr '
set @Entp_ID= '10000000001 '

declare @str varchar(8000)
set @str='SELECT '+ @User_No_TMP+'=User_No FROM Tab_UserInfor WHERE User_No='+@UName
select @str=@str+' AND User_No IN(SELECT TOP '+ @License_Num+' User_No FROM Tab_UserInfor WHERE Entp_ID='+@Entp_ID+')'

exec(@str)

dobear_0922 2007-11-19
  • 打赏
  • 举报
回复
TOP n [PERCENT]

n不能为变量吧,只能为常数

----------------
2005里面可以用,2000里面不行,,,
symbol441 2007-11-19
  • 打赏
  • 举报
回复


SELECT @User_No_TMP=User_No FROM Tab_UserInfor WHERE User_No=@UName AND User_No IN(SELECT TOP @License_Num User_No FROM Tab_UserInfor WHERE Entp_ID=@Entp_ID)


这里不能直接使用变量,要求必须采用字符串拼接的方式把其值先计算
sunhonglei2004 2007-11-19
  • 打赏
  • 举报
回复
TOP n [PERCENT]

n不能为变量吧,只能为常数
chuifengde 2007-11-19
  • 打赏
  • 举报
回复
declare @sql varchar(200)
set @sql='SELECT @User_No_TMP=User_No FROM Tab_UserInfor WHERE User_Name='''+@UName+''' AND User_No
IN(SELECT TOP '+ltrim(@License_Num)+' User_No FROM Tab_UserInfor WHERE Entp_ID='''+@Entp_ID+''''

exec sp_executesql @sql,'@User_No_Tmp int output',@User_No_Tmp output

34,590

社区成员

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

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