我有一个名为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
返回一行
那么,这里发生了什么?我错过了什么吗?
答案 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