回 帖 发 新 帖 刷新版面

主题:这个存储过程为甚么用不了?

alter procedure insertTable_A
    @A_Name char(50),
    @A_DateTime datetime=getDate
as
    insert into Table_A(A_Name,A_DateTime) values(@A_Name,@A_DateTime)
    


-------缺省参数使用
execute insertTable_A 'asdfa'

回复列表 (共11个回复)

沙发

datetime=getDate这个应该错吧

板凳

编译存储过程没有报错 加上 getDate() 后连编译都通不过?

3 楼

存储过程的参数如果用默认值,这个默认值必须为常数或null
可这样写
alter procedure insertTable_A
    @A_Name char(50)
as
    insert into Table_A(A_Name,A_DateTime) values(@A_Name,getdata())

4 楼

alter procedure insertTable_A(
    @A_Name char(50),
    @A_DateTime datetime=getDate())
as
    insert into Table_A(A_Name,A_DateTime) values(@A_Name,@A_DateTime) 

5 楼

TO 4楼,那种修改根本没法编译。

TO 3楼,谢谢你但是那个不是我想要的结果。因为我有可能通过传值传入时间,也有可能忽略时间从而采用数据库默认时间。

继续UP

6 楼

占楼,明天去公司弄。

7 楼

TO 3楼,谢谢你但是那个不是我想要的结果。因为我有可能通过传值传入时间,也有可能忽略时间从而采用数据库默认时间。
===

这样行不?

alter procedure insertTable_A
    @A_Name char(50),
    @A_DateTime datetime
as
    declare @d datetime
    set @d=isnull(@A_DateTime,getdate())
    insert into Table_A(A_Name,A_DateTime) values(@A_Name,@d)

8 楼

谢谢7楼.你的方法可以.但是这样的话datetime就变成必选参数了.必须填写null有没有使用可选参数的方法? 谢谢!

9 楼

再加一个判断试试

alter procedure insertTable_A
    @A_Name char(50),
    @A_DateTime datetime
as
    if @A_DateTime is null
    insert into Table_A(A_Name,A_DateTime) values(@A_Name,getdate())
    else
    insert into Table_A(A_Name,A_DateTime) values(@A_Name,@A_DateTime)

10 楼

呵呵.不是.

alter procedure insertTable_A
    @A_Name char(50),
    @A_DateTime datetime
as

   ... 

这里声明了2个参数,如果参数没有默认值是不能省略的~

我来回复

您尚未登录,请登录后再回复。点此登录或注册