SQL Server 存储过程 - 将数据类型 varchar 转换为 datetime 时出错

标签 sql sql-server t-sql datetime stored-procedures

我有这个存储过程:

ALTER PROCEDURE [dbo].[PostScheduledTasks] 
    @actualStart datetime = NULL, 
    @actualFinish datetime = NULL,
    @actualEndDate datetime = NULL,
    @UserDate1 datetime = NULL,
    @IsCompleted bit = 0,
    @PercentComplete float = 0.0,
    @UStmp varchar(10) = NULL,
    @SchedukeTaskID int = 0,
    @SortOrder int = 0
AS
BEGIN
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    UPDATE ScheduleTasks  
    SET ActualStart = @actualStart,
        ActualFinish = @actualFinish,
        ActualEndDate = @actualEndDate,
        UserDate1 = @UserDate1,
        IsCompleted = @IsCompleted,
        PercentComplete = @percentComplete,
        UStmp = @UStmp
    WHERE 
        ScheduleTaskID = @SchedukeTaskID
        AND SortOrder = @SortOrder
END

当我尝试执行它时:

DECLARE @return_value int

EXEC    @return_value = [dbo].[PostScheduledTasks]
        @actualStart = N'08-03-2016 8:00:00 AM',
        @actualFinish = N'08-03-2016 4:00:00 PM',
        @actualEndDate = N'08-03-2016 4:00:00 PM',
        @UserDate1 = N'27-01-2016 8:00:00 AM',
        @IsCompleted = 1,
        @PercentComplete = 1,
        @UStmp = N'jsuske',
        @SchedukeTaskID = 597295,
        @SortOrder = 19

SELECT  'Return Value' = @return_value
GO

我收到此错误:

Error converting data type varchar to datetime.

最佳答案

最安全的方法是将日期提供为 ISO 8601这是独立于文化的:

yyyy-mm-ddThh:mm:ss[.mmm]

The advantage in using the ISO 8601 format is that it is an international standard. Also, datetime values that are specified by using this format are unambiguous. Also, this format is not affected by the SET DATEFORMAT or SET LANGUAGE settings.

DECLARE @return_value int

EXEC    @return_value = [dbo].[PostScheduledTasks]
        @actualStart     = N'2016-03-08T08:00:00',
        @actualFinish    = N'2016-03-08T16:00:00',
        @actualEndDate   = N'2016-03-08T16:00:00',
        @UserDate1       = N'2016-01-27T08:00:00',
        @IsCompleted     = 1,
        @PercentComplete = 1,
        @UStmp           = N'jsuske',
        @SchedukeTaskID  = 597295,
        @SortOrder       = 19

SELECT  'Return Value' = @return_value

或者您必须检查设置语言/日期格式并提供正确格式的日期。

关于SQL Server 存储过程 - 将数据类型 varchar 转换为 datetime 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35875138/

相关文章:

sql - 在 SQL 中配对事件行

sql - 将 string+ntext 转换为 nvarchar 错误

mysql - 制定查询来检测不一致的数据

sql - MySQL UNION 每隔一个打印一次

java - 使用 HSQL 请求父实体时过滤一对多子实体

SQL 查询在 SQL Server 2012 中运行良好,但在 SQL Server 2008 R2 中无法执行

用于 alter table alter columns IDENTITY(1,1) 的 sql server helper 存储过程或实用程序

sql <> 不适用于日期时间

sql-server - GRANT 的 "AS DBO"部分有什么作用?

SQL 仅联接 1 行 - SQL Server 2005