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

drd*_*rdn 0 sql sql-server stored-procedures

我有一个看起来像这样的存储过程:

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

Run Code Online (Sandbox Code Playgroud)

执行命令是

EXEC sample_sp @Name = N'????'
Run Code Online (Sandbox Code Playgroud)

我在字符串值之前使用的执行命令中也定义了NameasNVARCHAR(255)N,但仍然没有检索到任何内容。另一方面,当我使用时, SELECT * FROM sample_table WHERE name = N'????'我得到了正确的记录。

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

Dan*_*man 5

问题在于这个OFFSET计算:

OFFSET (@Offset)*@PageSize ROWS
Run Code Online (Sandbox Code Playgroud)

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

如果要将@Offset 视为页码,则为偏移量计算减 1:

OFFSET (@Offset-1)*@PageSize ROWS
Run Code Online (Sandbox Code Playgroud)

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