1、创建存储过程:
use HotelDB
if exists(select * from sys.procedures where name='pro_getGuestName')
drop procedure pro_getGuestName
gocreate procedure pro_getGuestName
@GuestID int,
@GuestName varchar(50) output
as
begin
--sp_executesql后面执行的SQL语句必须是Unicode编码的字符串,所以此处为nvarchar类型。
declare @sqlStr nvarchar(1000);
--如果使用如下语句,将报错“必须声明标量变量 "@GuestID"。”
--set @sqlStr=N'select @GuestName=GuestName from dbo.GuestRecord where GuestID=@GuestID';
--以下是正确的
set @sqlStr=N'select @GuestName=GuestName from dbo.GuestRecord where GuestID='+CAST(@GuestID AS varchar)+'';
--必须在前面加上大写字母N,以表明后面的字符串是使用Unicode类型编码
execute sp_executesql @sqlStr,N'@GuestName varchar(50) output',@GuestName output
end
2、执行存储过程:
begin
declare @GuestID int;
declare @GuestName varchar(50);
set @GuestID=20;
exec [pro_getGuestName] @GuestID,@GuestName output
select @GuestName;
--print '@GuestName:'+@GuestName;
end
go
参考来源:https://www.cnblogs.com/hnsdwhl/archive/2011/07/23/2114730.html