SQL Server存储过程查询结果为空

时间:2015-03-05 16:18:31

标签: sql-server stored-procedures

我有一个名为tblTest的测试表,其中有两列:name (nvarchar)age (tinyint),值为:'我的名字',10

然后,我创建了以下过程:

create procedure procTest @n nvarchar as
select * from tblTest where name=@n  

当我运行此过程时,它返回空结果:

exec procTest @n='My name'  

但是当我将程序改为

alter procedure procTest @n tinyint as
select * from tblTest where age=@n  

并运行

exec procTest @n=10  

返回一行

那么,这里发生了什么?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

在存储过程中向nvarchar添加长度规范:

create procedure procTest (@n nvarchar(50)) as
select * from tblTest where name=@n

将其复制到局部变量将提高性能,并且通常是存储过程中的良好实践(有关更多信息,请参阅SQL Server: Query fast, but slow from procedure) - 与使用BEGIN和END语句一样:

create procedure procTest (@n nvarchar(50)) as
BEGIN
DECLARE @name nvarchar(50) = @n;
select * from tblTest where name=@name  
END