我希望这对于 SQL 专家来说是一个足够简单的问题...
我们有一张存储系统配置数据的表,并且通过触发器与一张历史表相关联,以便我们可以跟踪谁在何时更改了什么。
我需要向这个表中添加另一个值,但它是经常从代码中更改的值,并且要求我们不要跟踪其历史记录(我们不想让表格每天更新成千上万次而变得混乱)。
目前,我们的触发器类似于以下内容...
CREATE TRIGGER
[dbo].[SystemParameterInsertUpdate]
ON
[dbo].[SystemParameter]
FOR INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
INSERT INTO SystemParameterHistory
(
Attribute,
ParameterValue,
ParameterDescription,
ChangeDate
)
SELECT
Attribute,
ParameterValue,
ParameterDescription,
ChangeDate
FROM Inserted AS I
END
我希望能够添加一些逻辑,如果属性列的值以特定字符串(例如"NoHist_")为前缀,则停止创建记录。
考虑到我几乎没有使用触发器的经验,我想知道最好如何实现这个功能...我尝试了以下where子句:
where I.Attribute NOT LIKE 'NoHist_%'
但是它似乎不起作用。该值仍然被复制到历史记录表中。
如果您能提供任何帮助,将不胜感激。
好吧 - 正如Cade Roux所预测的那样,这在多次更新时会失败。我将不得不采取新的方法来解决这个问题。请问还有其他建议吗?
各位 - 请教一下...在这种情况下,为什么LEFT()比LIKE更可取?我知道我已经接受了答案,但我想了解一下。