sql存储过程
- SQL code
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author: <Author,,Name>-- Create date: <Create Date,,>-- Description: <Description,,>-- =============================================CREATE PROCEDURE Bolg_SelectByUser@clanID int,@UserID text,@topNum intASBEGIN EXECUTE Clan_SelectByIDUserID @ClanID,@UserID OUTPUT select top @topNum * from GH_BLog where UserID in (@UserID) order by LastModTime descENDGO
这个存储过程。因为我查的是多个用户。所以ID比较长,用TEXT了。这个过程主要作用是,传入一个家族的ID,在传入查询多少条,现在报错了
消息 102,级别 15,状态 1,过程 Bolg_SelectByUser,第 14 行
'@topNum' 附近有语法错误。
[解决办法]
@sql='select top'+ @topNum+' * from GH_BLog ....
exec(@sql)
[解决办法]
select top (@topNum) * from GH_BLog
[解决办法]
选中Top然后F1
[
TOP (expression) [PERCENT]
[ WITH TIES ]
]
参数
expression
指定返回行数的数值表达式。如果指定了 PERCENT,则 expression 将隐式转换为 float 值;否则,它将转换为 bigint。
在 INSERT、UPDATE、MERGE 和 DELETE 语句中,需要使用括号来分隔 TOP 中的 expression。为保证向后兼容性,支持在 SELECT 使用不包含括号的 TOP expression,但不推荐这种用法。
[解决办法]
给你改下:可以试一试
- SQL code
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author: <Author,,Name>-- Create date: <Create Date,,>-- Description: <Description,,>-- =============================================CREATE PROCEDURE Bolg_SelectByUser@clanID int,@UserID text,@topNum intASBEGIN Declare @SqlStr varchar(max) EXECUTE Clan_SelectByIDUserID @ClanID,@UserID OUTPUT Set @SqlStr = 'select top ' + Cast(@topNum As Varchar(10)) + ' * from GH_BLog where UserID in (' + @UserID + ') order by LastModTime desc ' Exec(@SqlStr)ENDGO
[解决办法]
就是把报错的那句改成动态sql 执行应该就没问题了