如何通过存储过程从数据库中检索阿拉伯语记录?

How to retrieve Arabic record from database via stored procedure?

我有一个如下所示的存储过程:

CREATE PROCEDURE sample_sp
    (
    @StartCreateDate NVARCHAR(30)= NULL,
    @EndCreateDate NVARCHAR(30)= NULL,
    @Name NVARCHAR(255) = NULL,
    @Offset INT = 1,
    @PageSize INT = 10
)
As
BEGIN
   SET NOCOUNT ON;
   SELECT * FROM sample_table
   WHERE
        (@StartCreateDate IS NULL OR [created_at] >= @StartCreateDate)
        AND
        (@EndCreateDate IS NULL OR [created_at] <= @EndCreateDate)
        AND
        (@NAME IS NULL OR [name] = @Name)
  ORDER BY id
  OFFSET (@Offset)*@PageSize ROWS
  FETCH NEXT @PageSize ROWS ONLY
END

执行的命令是

EXEC sample_sp @Name = N'سلام'

我已经将Name定义为NVARCHAR(255)并且在执行命令中我在字符串值之前使用N,但仍然没有被检索。另一方面,当我使用 SELECT * FROM sample_table WHERE name = N'سلام' 我得到了正确的记录。

我想知道我的存储过程或什至我的执行命令有什么问题?

这个OFFSET计算有问题:

OFFSET (@Offset)*@PageSize ROWS

使用默认值(偏移量 1,页面大小 10),该值将为 10,因此不会返回任何行,除非 11 行或更多行符合其他条件。

如果您想将@Offset 视为页码,请减去 1 以计算偏移量:

OFFSET (@Offset-1)*@PageSize ROWS

此外,考虑对 table 中的参数和列使用强类型日期时间类型。