日期:2014-05-18  浏览次数:20466 次

sql存储过程
SQL code



SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
CREATE PROCEDURE Bolg_SelectByUser
@clanID int,
@UserID text,
@topNum int
AS
BEGIN
   EXECUTE Clan_SelectByIDUserID @ClanID,@UserID OUTPUT
   select top @topNum * from GH_BLog where UserID in (@UserID) order by LastModTime desc
END
GO



这个存储过程。因为我查的是多个用户。所以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 ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
CREATE PROCEDURE Bolg_SelectByUser
@clanID int,
@UserID text,
@topNum int
AS
BEGIN
   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)
END
GO

------解决方案--------------------
就是把报错的那句改成动态sql 执行应该就没问题了