当前位置: 首页 > 知识库问答 >
问题:

将空日期时间值插入SQL表

亢建木
2023-03-14

下面是我们用来填充SQL数据库中的表的存储过程。@excDate是从C#批处理作业中发送的参数,该作业从和Excel电子表格中获取值。

如果当前代理的培训处于活动状态,则电子表格的“过期日期”单元格中不会有值。这将导致从C#代码向存储过程发送一个空字符串,然后将其转换为日期时间值1900-01-01。在我需要使用光标将新记录插入表之前,这一切都是正常的。

如果@exDate值是1900-01-01,那么我需要SQL记录的到期日期字段中的值为NULL。但是,我不能设置@exdate=NULL,也不能简单地将其设置为空白 ('') [编辑:由于业务规则,我不能设置为空白。空白值将导致字段的值设置为1900-01-01]。有什么建议吗?

    DECLARE @date datetime = GETDATE()
    IF @expDate = '1900-01-01' SET @flag = '1'
    IF @expDate = '1900-01-01' SET @expDate = GETDATE()

    DECLARE prod_cursor CURSOR LOCAL SCROLL FOR
    SELECT ProductCode 
    FROM CourseToProduct 
    WHERE CourseCode = @courseCode and (TerminationDate >= @expDate OR TerminationDate IS NULL)

    IF @flag = '1' SET @expDate = ''

    OPEN prod_cursor

    FETCH NEXT FROM prod_cursor
    INTO @productCode

    WHILE @@FETCH_STATUS = 0
    BEGIN
        IF NOT EXISTS
        (
        SELECT *
        FROM AgentProductTraining
        WHERE @sNumber = SNumber and 
              @courseCode = CourseCode and 
              @productCode = ProductCode and 
              @dateTaken = DateTaken
        )
        BEGIN
            IF @sNumber IS NOT NULL
            BEGIN
                INSERT INTO AgentProductTraining
                            (
                             SNumber,
                             CourseCode,
                             ProductCode,
                             DateTaken,
                             DateExpired,
                             LastChangeOperator,
                             LastChangeDate
                            ) 
                VALUES      (
                             @sNumber,
                             @courseCode,
                             @productCode,
                             @dateTaken,
                             COALESCE(@expDate, 'NULL'),
                             @lastChangeOperator,
                             @lastChangeDate
                           )    
            END
        END

        FETCH NEXT FROM prod_cursor
        INTO @productCode
    END
    CLOSE prod_cursor;
    DEALLOCATE prod_cursor;

共有2个答案

白彦
2023-03-14

这行得通吗?

                INSERT INTO AgentProductTraining
                        (
                         SNumber,
                         CourseCode,
                         ProductCode,
                         DateTaken,
                         DateExpired,
                         LastChangeOperator,
                         LastChangeDate
                        ) 
            VALUES      (
                         @sNumber,
                         @courseCode,
                         @productCode,
                         @dateTaken,
                         CASE WHEN @expDate = '1900-01-01' THEN Null ELSE @expDate END, 
                         @lastChangeOperator,
                         @lastChangeDate
                       )    
廖鸿达
2023-03-14

通过遵循Oded的注释,我去掉了COALESCE语句,并将@flag值设置为NULL,而不是NULL。通过更改这行代码

IF @flag = '1' SET @expDate = ''

对此:

IF @flag = '1' SET @expDate = NULL

sproc现在起作用了。

 类似资料:
  • 问题内容: 我对约会有点困惑。我目前正在使用天气应用程序,并且一切正常。.我只是想将这种类型的格式处理成我自己想要的格式。 我只是想将此日期转换为大纪元时间,然后以所需的格式结算日期:: 对于J-SON 或者我想将此日期转换为更少的数字,例如,Sun,9月9日9:23 Am等。 http://dataservice.accuweather.com/currentconditions/v1/2570

  • 我们有带有日期字段(类型date)的表,将时间戳插入日期字段在某些oracle环境中工作(我们有多种开发环境),但在某些环境中失败。

  • 问题内容: 我想向Access插入一个datetime值,但是出现此错误: net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.4数据异常:无效的日期时间格式 这是代码: 问题答案: 错误消息表明您的方法最终试图做类似的事情 并且由于以下两个原因将无法正常工作: UCanAccess希望日期文字被括在井号()中,并且 UCanAcce

  • 问题内容: 我已经写了下面的代码,但它似乎只插入当前日期,而不是当前时间。有人知道该怎么做吗? 问题答案: 似乎只是因为这就是它要打印的内容。但是实际上,您不应该以这种方式编写逻辑。这等效于: 将系统日期转换为字符串,只是将其转换回日期,似乎很愚蠢。 如果要查看完整日期,则可以执行以下操作:

  • 问题内容: 我有一个脚本,需要在脚本的不同行执行以下命令: 在我的陈述中,我有以下内容: 我收到以下错误: 如果我将语句的顺序更改为: 我收到以下错误: 如果我再次将语句更改为: 我收到以下错误: 这是怎么回事,我怎么都可以工作? 问题答案: 您的麻烦是,您有一些代码希望对 模块 进行引用,而其他代码希望对类进行引用 。 显然,不能两者兼有。 当您这样做时: 您首先要设置为对该类的引用,然后立即将

  • 问题内容: 我对约会有点困惑。我目前正在使用天气应用程序,并且一切正常。.我只是想将这种类型的格式处理成我自己想要的格式。 我只想将此日期转换为大纪元时间,然后以所需的格式确定日期:: 对于J-SON 或者我想将此日期转换为更少的数字,例如,Sun,9月9日9:23 Am等。 http://dataservice.accuweather.com/currentconditions/v1/25707