我的一个存储过程有如下语句:
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= 这个地方提示 '=' 附近有语法错误。
怎么解决呢?
先谢谢各位大虾啊~~
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= 这个地方提示 '=' 附近有语法错误。
怎么解决呢?
先谢谢各位大虾啊~~
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
这里不能直接使用变量,要求必须采用字符串拼接的方式把其值先计算
2005里面可以用,2000里面不行,,,
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)
服务器: 消息 245,级别 16,状态 1,行 13
将 varchar 值 'SELECT ' 转换为数据类型为 int 的列时发生语法错误。
把TOP加上括號就行了吧
换SET ROWCOUNT @License_Num好了
——上述的几个做法在2000里都会有问题