JKK*_*JKK 1 sql sql-server sql-server-2000
我想在删除的记录上设置日期/时间戳,但我得到了奇怪的结果.当此触发器触发时,它将日期设置为1906!
我已尝试GETDATE()在查询中使用该函数,UPDATE并在表属性上使用默认值.它适用于我手动输入到DELETED_RECORDS表中的记录,但由于实际删除而移入的任何记录都有1906日期.我不确定发生了什么
ALTER TRIGGER [dbo].[Backup_TT_Deleted_Records]
ON [dbo].[tblLLS_TT]
FOR DELETE
AS
BEGIN
INSERT INTO dbo.tblLLS_TT_DELETED_RECORDS
SELECT *
FROM Deleted
UPDATE dbo.tblLLS_TT_DELETED_RECORDS
SET Deleted_DTTM = GETDATE()
WHERE dbo.tblLLS_TT_DELETED_RECORDS.Deleted_DTTM IS NULL
END
Run Code Online (Sandbox Code Playgroud)
还有上面的触发器,如果我在DELETED_RECORDS表上输入一个记录而留下Delete_DTTMnull然后删除一个记录,导致触发器触发它将正确填写该记录,但是进入DELETED_RECORDS表中的记录将再次具有日期我还注意到每条记录的日期增加一天.
知道这里可能会发生什么吗?
您希望我执行的任何其他测试让我知道,我会发布结果.这个很奇怪.谢谢!
您的插入语句如下
INSERT INTO dbo.tblLLS_TT_DELETED_RECORDS
SELECT *
FROM Deleted
Run Code Online (Sandbox Code Playgroud)
你既不是使用显式列列表中INSERT也不在SELECT.
你说
我还注意到每个记录的日期增加一天.
我的猜测是源中的列没有插入到您认为它们所在的目标列中.
您正在删除一批具有IDENTITY列值的行,2191 - 2555并将该int值插入到datetime列中,您将在1906年获得隐式强制转换为日期(整数被视为表示自1900年1 月1 日以来的天数)
我假设源列可能IDENTITY会解释日期的升序性质.要解决此问题,请尝试明确指定两个列列表.另外需要注意的是,等效的源列和目标列必须位于相同的序号位置.例如,SQL Server将不会根据列名匹配它们.
INSERT INTO dbo.tblLLS_TT_DELETED_RECORDS
(col1,
col2,
col3)
SELECT col1,
col2,
col3
FROM Deleted
Run Code Online (Sandbox Code Playgroud)
此外,你不需要单独的UPDATE声明,你也可以这样做INSERT
INSERT INTO dbo.tblLLS_TT_DELETED_RECORDS
(col1,
col2,
col3,
Deleted_DTTM)
SELECT col1,
col2,
col3,
getdate()
FROM Deleted
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |