Топ N записей в SQL Server с параметром показывает ошибку - PullRequest
0 голосов
/ 19 октября 2019

Я пишу хранимую процедуру для возврата N записей на основе передачи входных параметров:

ALTER PROCEDURE [dbo].[StaffQueue]
    @Staff_Dept VARCHAR(100),
    @numberOfStaffs INT
AS
BEGIN
    DECLARE @SQL VARCHAR(1000)

    SET @SQL = 'select top ('+ @numberOfStaffs +') Display_Name as 
   StaffName,e.Emp_code as StaffCode from Employee e'

    IF @Staff_Dept > ''
       SET @SQL = @SQL + ' where e.Designation IN ('''+@Staff_Dept+''')';

    EXEC(@SQL);
END

Когда я выполняю эту хранимую процедуру следующим образом:

EXEC StaffQueue @Staff_Dept ='', @numberOfStaffs = 10 

, она показываетошибка:

Ошибка преобразования около вершины ('

Может кто-нибудь помочь мне решить эту ошибку?

Ответы [ 3 ]

2 голосов
/ 19 октября 2019

Вам нужно либо изменить тип данных @numberOfStaffs на varchar, либо преобразовать его в запросе

SET @SQL= 'select top ('+ CONVERT(varchar(10), @numberOfStaffs) +') Display_Name as 
   StaffName,e.Emp_code as StaffCode from Employee e'

  IF @Staff_Dept>''
     SET @SQL = @SQL + ' where e.Designation IN ('''+@Staff_Dept+''')';
0 голосов
/ 19 октября 2019

Вы только что допустили синтаксическую ошибку SQL, используя скобки для инструкции TOP .

Select Top(5) * From Mytable -- this is wrong
Select Top 5  * From Mytable -- this is good
0 голосов
/ 19 октября 2019

Вы должны привести ваш @numberOfStaffs к varchar перед конкатенацией к динамической строке sql.

SET @SQL= 'select top ('+ cast(@numberOfStaffs as varchar(max)) +') Display_Name as 
   StaffName,e.Emp_code as StaffCode from Employee e'
...