【问题标题】:Trigger date conversion fails触发日期转换失败
【发布时间】:2019-11-20 19:49:42
【问题描述】:

我有一个触发器对不同的表执行 INSERT_AFTER。目标表是要发送到另一家公司的数据的临时表。在我们这边的数据库中,日期是smalldatetime。另一个公司需要这种拆分为日期字段和时间字段。也没有进入临时表。我尝试了几种不同的方法,包括 CAST 和 CONVERT,但均未成功。

相关的SQL如下:

    CAST(inserted.CallInDate AS DATE)   AS ClientCallinDate,
    CAST(inserted.CallInDate AS TIME)   AS ClientCallinTime,
    --CONVERT(DATE,inserted.CallInDate) AS ClientCallinDate,
    --CONVERT(TIME,inserted.CallInDate) AS ClientCallinTime,

此触发器跟随另一个 INSERT_AFTER 触发器对其他表执行相同的操作。第一个触发器作为“第一个”触发,有问题的触发器作为最后一个触发。

`EXEC sp_settriggerorder @triggername=N'[dbo].[TR_FirstTable_to_Client_I]', @order=N'First', @stmttype=N'INSERT'`

第二个触发器还有另一个字段失败,它是由第一个触发器创建的,作为从其他公司收到的确认。我不认为这些是相关的,但是我也没有弄清楚,我不能确定。

`EXEC sp_settriggerorder @triggername=N'[dbo].[TR_FirstTable_to_Client_II]', @order=N'Last', @stmttype=N'INSERT'`

我需要了解哪些可能会失败或我需要更改 SQL 中的哪些内容。我已删除触发器并重新创建它,但这没有任何帮助,实际上给了我一个我尚未解决的错误。

【问题讨论】:

  • 您使用的是哪个 dbms? (这是一个产品特定的问题。)
  • 抱歉!搞砸了基本的发布。微软 SQL Server 2014。
  • 您真的需要一个触发器来存储您可以通过查询提取的数据的硬拷贝吗?
  • 没有代码和对“没有成功”的明确定义,就不可能提出有用的建议。
  • 您收到的实际错误消息是什么?哪些语句/代码行会抛出这些错误消息? (您可以通过在触发器中添加PRINT 消息来解决此问题)。 “第二个触发器也有另一个由第一个触发器创建的字段失败”是什么意思?您的触发器如何创建字段?请记住,除了您告诉我们的内容外,我们不了解您的具体设置。

标签: sql sql-server date triggers smalldatetime


【解决方案1】:

如果上面的代码是 INSERT 语句的一部分,它可能只是因为别名:AS ClientCallinDate 而失败。只要您的语句构造正确,您就不需要为SELECT 语句中的列设置别名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多