我需要一个SQL触发器,无论何时插入或更新单元都会将其填充为零。很好奇是否有最佳实践将两个字符串附加在一起就像我在更新命令中所做的那样。这是最好的方法吗?
CREATE TRIGGER PadColumnTenCharsInserted ON Table
AFTER INSERT
AS
DECLARE
@pad_characters VARCHAR(10),
@target_column NVARCHAR(255)
SET @pad_characters = '0000000000'
SET @target_column = 'IndexField1'
IF UPDATE(IndexField1)
BEGIN
UPDATE Table
SET IndexField1 = RIGHT(@pad_characters + IndexField1, 10)
END
GO
答案 0 :(得分:1)
你的填充码看起来很好。
而不是像这样更新表格中的每一行:
UPDATE Table
仅更新触发触发器的行:
UPDATE updated
此外,你还有一些无关的代码 - 所有涉及@target_column的代码。看起来你不确定这是INSERT触发器还是UPDATE触发器。我看到AFTER INSERT
和IF UPDATE
。
答案 1 :(得分:0)
两个问题:
你在@target_column做什么?您声明它并使用列名设置它,但之后您永远不会使用它。如果您打算在后续SQL语句中使用该变量,则可能需要将语句包装在EXECUTE()中或使用sp_executesql()。
语法“UPDATE Table ...”对于您的更新语句是正常的,假设“Table”是您要更新的表的名称。似乎缺少的是某种过滤器。或者您是否真的打算为整个表格中的每一行更新该列? 处理此问题的一种方法是声明另一个变量并使用更新的行的PK设置它,然后使用where子句将更新限制为该行。像这样:
DECLARE @id int
SELECT @id = Record_ID FROM INSERTED
- 你的触发器的主体
WHERE Record_ID = @id
我喜欢你的填充码。这对我来说很好。