if exists(select 1 from sysobjects where [id]= object_id(N'[dbo].[pro_Student_insert]')
and [xtype] in(N'P'))
drop procedure [dbo].[pro_Student_insert]
go
create procedure [dbo].[pro_Student_insert]
(@no varchar(9),
@name varchar(8),
@sex bit = 1,
@birthday smalldatetime = '1988-8-8',
@resault varchar(50) output
)
as
declare @sql varchar(200)
if exists(select 1 from Student where Sno =@no)
begin
set @resault = N'学号重复,请勿反复输入。'
return
end
set @sql = 'insert Student values('''+@no+''','''+@name+''','+str(@sex)+','''+@birthday+''')'
exec(@sql)
if (@@error<>0)
begin
set @resault = N'输入成功'
return
end
if (@@error<>0)
begin
set @resault = N'失败,请检查数据再试、或者联系管理员。'
return
end
go
--测试存储过程
declare @aaa varchar(50)
exec pro_Student_insert 'AP0808810' ,'a',1,'1988-8-8',@aaa output
print @aaa
go
这里'1988-8-8',日期应该怎样填?

解决方案 »

  1.   

    if exists(select 1 from sysobjects where [id]= object_id(N'[dbo].[pro_Student_insert]') 
    and [xtype] in(N'P')) 
    drop procedure [dbo].[pro_Student_insert] 
    go 
    create procedure [dbo].[pro_Student_insert] 
    (@no varchar(9), 
    @name varchar(8), 
    @sex bit = 1, 
    @birthday smalldatetime = '1988-8-8', 
    @resault varchar(50) output 

    as 
    declare @sql varchar(200) 
    if exists(select 1 from Student where Sno =@no) 
    begin 
    set @resault = N'学号重复,请勿反复输入。' 
    return 
    end 
    set @sql = 'insert Student values('''+@no+''','''+@name+''','+str(@sex)+','''+convert(char(10),@birthday,120)+''')' 
    exec(@sql) 
    if (@@error <>0) 
    begin 
    set @resault = N'输入成功' 
    return 
    end 
    if (@@error <>0) 
    begin 
    set @resault = N'失败,请检查数据再试、或者联系管理员。' 
    return 
    end 
    go 
    --测试存储过程 
    declare @aaa varchar(50) 
    exec pro_Student_insert 'AP0808810' ,'a',1,'1988-8-8',@aaa output 
    print @aaa 
    go 
      

  2.   

    declare @aaa varchar(50)
    exec pro_Student_insert 'AP0808810' ,'a',1,'1988-8-8',@aaa output
    print @aaa
    go
    这里'1988-8-8',日期,或者讲时间,应该怎样填?报错,输入的不是时间,而是字符串
      

  3.   

    没啥问题啊。if exists(select 1 from sysobjects where [id]= object_id(N'[dbo].[pro_Student_insert]') 
    and [xtype] in(N'P')) 
    drop procedure [dbo].[pro_Student_insert] 
    go 
    create procedure [dbo].[pro_Student_insert] 
    (@no varchar(9), 
    @name varchar(8), 
    @sex bit = 1, 
    @birthday smalldatetime = '1988-8-8', 
    @resault varchar(50) output 

    as 
    declare @sql varchar(200) 
    if exists(select 1 from Student where Sno =@no) 
    begin 
    set @resault = N'学号重复,请勿反复输入。' 
    return 
    end 
    set @sql = 'insert Student values('''+@no+''','''+@name+''','+str(@sex)+','''+@birthday+''')' 
    exec(@sql) 
    if (@@error <>0) 
    begin 
    set @resault = N'输入成功' 
    return 
    end 
    if (@@error <>0) 
    begin 
    set @resault = N'失败,请检查数据再试、或者联系管理员。' 
    return 
    end 
    go 
    --测试存储过程 
    declare @aaa varchar(50) 
    exec pro_Student_insert 'AP0808810' ,'a',1,'1988-8-8',@aaa output 
    print @aaa 
    go 
      

  4.   

    我觉得应该这样的
    @birthday smalldatetime = '08 08 1988'   --月-日-年--
    exec pro_Student_insert 'AP0808810' ,'a',1,'08 08 2008',@aaa output 你试试看
      

  5.   

    还有这里为什么一定要用smalldatetime呢
    你当成字符串不是一样可以的吗
    用varchar就可以了
    这样你上面就不会报错了吧