【问题标题】:How to insert top selecting number as a parameter in a stored procedure如何在存储过程中插入顶部选择数字作为参数
【发布时间】:2015-01-07 17:42:07
【问题描述】:

我试图不时获得表的前 10、前 5 记录。因此,我将创建一个带有参数的存储过程,该参数接受记录数作为参数。但它在查询中的@number 附近给了我一个错误。

这是我尝试过的,这给了我一个语法错误:

error=Msg 102,级别 15,状态 1,过程 selectVoterTopGivenNumberRECS,第 10 行“@number”附近的语法不正确。

代码:

CREATE PROCEDURE selectVoterTopGivenNumberRECS
  (
    @number int
  )
AS 
BEGIN
BEGIN TRANSACTION 
SET NOCOUNT ON;
--Query

 SELECT TOP @number 

V.NICorPP as NICorPP,V.fName+' '+V.mName+' '+V.lName AS Name,
V.DOB AS DateofBirth,
CASE (V.gender) 

  WHEN 1 THEN 'Male'
  WHEN 2 THEN 'Female' 
  END  AS Gender,V.vtaddress AS VoterAddress,V.phHome AS ContactHome,
   V.phMob AS  ContactMobile,V.occupation AS Occupation, 
  V.occRegID AS RegisteredOCCID,LGD.LGDivName
FROM Voter V
INNER JOIN LGDivision LGD ON V.lgDiv=LGD.LGDivID
   WHERE V.vtStatus='Active'; 

COMMIT TRANSACTION
END;

如何克服这个问题?

【问题讨论】:

  • 能否请您附上您收到的错误信息?看来你没说完那句话。
  • @paqogomez error=Msg 102,级别 15,状态 1,过程 selectVoterTopGivenNumberRECS,第 10 行“@number”附近的语法不正确。

标签: sql sql-server stored-procedures


【解决方案1】:

您需要在parameter 周围添加括号

SELECT TOP (@number) V.NICorPP                               AS NICorPP,
                           V.fName + ' ' + V.mName + ' ' + V.lName AS NAME,
                           V.DOB                                   AS DateofBirth,
                           CASE V.gender
                             WHEN 1 THEN 'Male'
                             WHEN 2 THEN 'Female'
                           END                                     AS Gender,
                           V.vtaddress                             AS VoterAddress,
                           V.phHome                                AS ContactHome,
                           V.phMob                                 AS ContactMobile,
                           V.occupation                            AS Occupation,
                           V.occRegID                              AS RegisteredOCCID,
                           LGD.LGDivName
      FROM   Voter V
             INNER JOIN LGDivision LGD
                     ON V.lgDiv = LGD.LGDivID
      WHERE  V.vtStatus = 'Active';

【讨论】:

  • @chathwind - 很高兴它有帮助
【解决方案2】:

你只需要给变量添加参数,改变

SELECT TOP @number 

 SELECT TOP (@number)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多