USE [manage]
GO/****** Object:  Table [dbo].[Employee]    Script Date: 08/26/2011 16:56:23 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOSET ANSI_PADDING ON
GOCREATE TABLE [dbo].[Employee](
[eid] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](20) NULL,
[sex] [varchar](4) NULL,
[age] [int] NULL,
[birthday] [datetime] NULL,
[did] [int] NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
[eid] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]GOSET ANSI_PADDING OFF
GOcreate procedure insertemp
(
@name varchar(20),
@sex varchar(10),
@age int,
@birthday date,
@did int
)
as
insert into Employee values(@name,@sex,@age,@birthday,@did);
go
exec insertemp '尼斯','F',19,'1991-01-11',1002
exec insertemp '张三','M',19,'1991-09-22',1002
create procedure seemp(
@age int,
@name varchar(20) output
)as
select @name=name from Employee where age=@age;
go
declare @name varchar(20)
exec seemp 19,@name output
print'姓名:'+@name
go
为什么输出的只有一个????、、
请高手帮忙解决

解决方案 »

  1.   

    select @name=name from Employee where age=@age;只会找一个,不会多找。select @name=isnull(@name+',','')+name from Employee where age=@age;
      

  2.   


    select @name=name from Employee where age=@age
    --select是循环赋值的,一直循环到结果集中的最后一个结果赋给变量结束
    --要逐个赋值可以用游标或者循环,放到一起可以看楼上
      

  3.   

    存储过程没有赋初始值可以用isnull也可以直接set @name=''
    然后select @name=@name+name from Employee where age=@age;
      

  4.   

    select @name=name from Employee where age=@age
    这样写只会输出最后一个值,
    设置set @name=''
    select @name=@name+char(10)+name from Employee where age=@age;
    就能把结果拼接起来