在SQL中网友常常遇到关于output类型参数。对于这种类型的参数,书上描述的可能不太清楚直观,造成大家对这一类型参数的使用有一定的困惑。其实output类型参数的性质就类似C语言编程里的地址传递参数,地址传递参数对型参每次修改都会改变实参的原值,即使参数跳出作用范围,实参也会保留最终的修改。据个例子:
CREATE PROC OP(@out varchar(100) output)
AS
set @out = @out + 'aaaa'
GO
declare @str varchar(100)
set @str = 'A'
exec OP @str output
select @str
结果为:Aaaaa
CREATE PROC P(@out varchar(100))
AS
set @out = @out + 'aaaa'
GO
declare @str varchar(100)
set @str = 'A'
exec OP @str
select @str
结果为:A
从这个例子就可以看出来了,第一段代码中@str的内容经过存储过程修改后,将最终结果保存了下来,而在第二段代码中对@str的修改没有保存下来,仍就显示@str原来的值'A'