存储过程的声明:
ALTER PROCEDURE [dbo].[usp_Accounts_PutUser]
(
@UserID           int,         --用户ID
@LoginID       varchar(20), --登录ID
@Password       varchar(32), --密码
@UserType       int,         --用户类型
@ExpiredDate   datetime,     --过期时间
--@LoginTime       datetime,     --登录时间
@Disable       bit,         --是否禁用
@IsAdministrator  bit,         --是否超级用户
@Re           varchar(256), --备注
@Status           int         --状态
)调用的代码是:
Exec [dbo].[usp_Accounts_PutUser] 19, '@EngRealName', '888888',1, DateAdd(year, 1, getdate()), 0, 0, null, 1报错:
消息 170,级别 15,状态 1,第 1 行
第 1 行: 'year' 附近有语法错误。主要的问题集中在“@ExpiredDate   datetime,     --过期时间”这里,直接放个字符串常量也不会错,但是放这个时间类型的函数却报错。不解,请各位高手帮忙了!谢谢!

解决方案 »

  1.   

    declare @dt as datetime
    set @dt = getdate()
    Exec [dbo].[usp_Accounts_PutUser] 19, '@EngRealName', '888888',1, DateAdd(year, 1, @dt), 0, 0, null, 1
      

  2.   

    declare @dt as datetime 
    set @dt =  DateAdd(year, 1, getdate()) Exec [dbo].[usp_Accounts_PutUser] 19, '@EngRealName', '888888',1,@dt, 0, 0, null, 1
      

  3.   

    ---getdate()不能直接用作参数
    declare @t  datetime 
    set @t = getdate() 
    Exec [dbo].[usp_Accounts_PutUser] 19, '@EngRealName', '888888',1, DateAdd(year, 1, @t), 0, 0, null, 1
      

  4.   

    第 1 行: 'year' 附近有语法错误。 看看附近的字符有没有中文符号
      

  5.   

    奇怪怎么getdate()不能作参数呢?....
      

  6.   

    create proc p_test 
    @dt datetime
    as
    select datename(weekday,@dt)
    go
    exec p_test '2008-05-20'
    go
    exec p_test getdate()--error
    go
    declare @dt datetime
    set @dt=getdate()
    exec p_test @dt
      

  7.   

    dateadd 也不能做参数
    (系统函数不能作为调用存储过程时传递的参数)create proc p_test 
    @dt datetime
    as
    select datename(weekday,@dt)
    go
    exec p_test '2008-05-20'
    go
    exec p_test dateadd(year,1,'2008-05-20')--Error
    go
    declare @dt datetime
    set @dt=dateadd(year,1,getdate())
    exec p_test @dt