我有这个存储过程,它不会返回我想要的记录并且该记录存在:
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'
并且它有效,但是当我使用参数时,我得不到结果!
答案 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