SQL Server中带有参数的前N条记录显示错误

问题描述 投票:0回答:3

我正在编写一个存储过程,以根据传递的输入参数返回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 

显示错误:

Top(()附近的转换错误

有人可以帮助我解决此错误吗?

sql sql-server sql-server-2008 sql-server-2005
3个回答
1
投票

您需要将@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
投票

在连接到动态sql字符串之前,应将@numberOfStaffs强制转换为varchar

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

0
投票

您只是通过在TOP指令中使用括号来造成SQL语法错误。

选择顶部(5)*来自Mytable-这是错误的选择Top 5 * From Mytable-这很好
© www.soinside.com 2019 - 2024. All rights reserved.