尽管存在数据,但SQL Server存储过程不会返回数据

时间:2015-11-11 20:50:02

标签: sql-server sql-server-2008 tsql stored-procedures sql-server-2012

我有这个存储过程:

ALTER PROCEDURE [dbo].[getAllSectionPartsForPage]
    (@Page nvarchar(20))
AS
BEGIN
    SELECT 
        ID, (Section + ' ID:' + CAST(ID As nvarchar(10))) AS Section 
    FROM 
        PagePartText 
    WHERE 
        [Page] = @Page
END

出于某种原因,当我提交带有此值的参数时:'/programs/brainology-for-home.aspx'我无法获得任何结果。

直接在SSMS中执行相同的查询:

SELECT 
    ID, (Section + ' ID:' + CAST(ID As nvarchar(10))) AS Section 
FROM 
    PagePartText 
WHERE 
    [Page] = '/programs/brainology-for-home.aspx'

返回我需要的数据

知道我为什么无法使用存储过程获取数据?在存储过程中使用其他参数获取我(不同)数据集,但我不知道为什么我无法使用此特定参数获取所需数据,尽管它存在于db表中。

由于

1 个答案:

答案 0 :(得分:2)

存储过程的输入参数@Page nvarchar(20)无法完全容纳'/programs/brainology-for-home.aspx'

监视...

DECLARE @Page nvarchar(20)
SET @Page = '/programs/brainology-for-home.aspx'
PRINT '@Page = ''' + @Page + ''''

结果:

@Page = '/programs/brainology'

您的输入值将被截断以适合定义的输入参数大小。尝试将@Page扩展为至少nvarchar(34)以使此特定案例有效,或者只是将其吹为nvarchar(max),并且永远不需要再考虑它。

ALTER PROCEDURE [dbo].[getAllSectionPartsForPage](@Page nvarchar(max))
AS
BEGIN
    SELECT ID, (Section + ' ID:' + CAST(ID As nvarchar(10))) AS Section FROM PagePartText WHERE [Page] = @Page
END