如何通过存储过程从数据库中检索阿拉伯语记录?
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 中的参数和列使用强类型日期时间类型。
我有一个如下所示的存储过程:
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 中的参数和列使用强类型日期时间类型。