使用存储过程更新表时出错

时间:2011-02-19 10:22:42

标签: c# .net

在此存储过程中发生错误。那就是'format'不是公认的内置函数名称

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[attendance_updatebyemployee_id]
@Employee_id int,
@AtDate datetime,
@FNLogged bit,
@ANLogged bit,
@LogTime varchar(10),
@LogOuttime varchar(10) 
AS
BEGIN   

select @AtDate 



SET NOCOUNT ON;    
    update Mst_Attendance set FNLogged=@FNLogged,
   ANLogged=@ANLogged,LogTime=@LogTime,LogOuttime=@LogOuttime 
   where EmployeeId=@Employee_id and Atdate = FORMAT(@AtDate,'MM/DD/YYYY')

select * from Mst_Attendance where Atdate=@AtDate and EmployeeId=@Employee_id


END

4 个答案:

答案 0 :(得分:1)

您使用的是什么数据库和版本?通过语法,我假设它是MS SQL Server,但是什么版本? 2000年,2008年?

在MS SQL Server中,没有FORMAT功能。但您可以使用CONVERT

CONVERT(VARCHAR(10), @AtDate ,101)

101这里的意思是'MM / DD / YYYY'。对于其他格式,请查看Official SQL Documentation

我假设数据库中的Atdate字段是VARCHAR(10)(否则根本不需要任何转换)。但我强烈建议不要这样做。尽可能使用DATETIME表示日期, VARCHAR

答案 1 :(得分:0)

FORMAT() 是SQL Server内置函数。

你可以这样做:

update Mst_Attendance 
set 
    FNLogged=@FNLogged, ANLogged=@ANLogged, 
    LogTime=@LogTime, LogOuttime=@LogOuttime     
where 
    EmployeeId=@Employee_id AND
    Atdate = @AtDate

请告诉我,您的Atdate列是datetime而不是varchar()

答案 2 :(得分:0)

以MM / DD / YY格式输出DateTime列作为字符串的替代方法:

CONVERT(VARCHAR, @AtDate, 1)

但是,在查询中不需要这样做,因为列似乎已经是DateTime类型。

更多内置日期转换格式:

http://www.technoreader.com/SQL-Server-Date-Time-Format.aspx

答案 3 :(得分:0)

尝试

 CONVERT(VARCHAR(10), @AtDate, 101) AS [MM/DD/YYYY]

但是,您的AtDate列肯定应该是日期时间吗?