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
我有一个名为 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