SQL Server存储过程 - 不返回预期数据

时间:2013-11-26 13:08:57

标签: sql-server c#-4.0 stored-procedures

我有这个存储过程,它不会返回我想要的记录并且该记录存在:

ALTER PROCEDURE [dbo].[Student_SearchByName]
@FName NVarchar
AS
BEGIN
   SELECT 
       StudentID, FName, LName, Student.BirthDate, 
       DATEDIFF(hour, BirthDate, GETDATE()) / 8766 As 'Age' 
   FROM
       Student 
   WHERE 
       Student.FName = @FName
END

我在Visual Studio中填充参数并尝试:

SELECT 
    StudentID, FName, LName, Student.BirthDate,
    DATEDIFF(hour, BirthDate, GETDATE()) / 8766 As 'Age' 
FROM
    Student 
WHERE
    Student.FName = 'Name'

并且它有效,但是当我使用参数时,我得不到结果!

2 个答案:

答案 0 :(得分:2)

如果您指定:

ALTER PROCEDURE [dbo].[Student_SearchByName]
    @FName NVarchar

那么你的@FName 只有一个字符很长 - 你可能不希望这样。

您应始终为任何(N)VARCHAR变量和参数指定明确的长度

使用类似的东西:

ALTER PROCEDURE [dbo].[Student_SearchByName]
   @FName NVarchar(100)

或任何对你有意义的事情。

答案 1 :(得分:2)

您需要指定NVarchar的长度,否则SQL Server将截断为第一个char。 所以它变成了:

ALTER PROCEDURE [dbo].[Student_SearchByName]
// Student.FName always less than 500 characters
@FName NVarchar(500)
AS
BEGIN
    SELECT StudentID,FName,LName,Student.BirthDate,DATEDIFF(hour,BirthDate,GETDATE())/8766      As 'Age' 
    from Student where Student.FName=@FName
END