我正在编写一个存储过程,以根据传递的输入参数返回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(()附近的转换错误
有人可以帮助我解决此错误吗?
您需要将@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+''')';
在连接到动态sql字符串之前,应将@numberOfStaffs
强制转换为varchar
。
SET @SQL= 'select top ('+ cast(@numberOfStaffs as varchar(max)) +') Display_Name as
StaffName,e.Emp_code as StaffCode from Employee e'
您只是通过在TOP指令中使用括号来造成SQL语法错误。
选择顶部(5)*来自Mytable-这是错误的选择Top 5 * From Mytable-这很好