在此存储过程中发生错误。那就是'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
答案 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列肯定应该是日期时间吗?