SQL服务器存储过程查询结果为空

SQL server stored procedure query result empty

我有一个名为 tblTest 的测试 table,包含两列:name (nvarchar)age (tinyint),值:'My name'、10

然后,我创建以下程序:

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

当我运行这个程序时,它return空结果:

exec procTest @n='My name'  

但是当我将程序更改为

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

和运行

exec procTest @n=10  

它return一行

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

在存储过程中为您的 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