添加 SQL 触发器以始终删除更新/插入列中的前导/尾随空格?

问题描述 投票:0回答:1

如果我在表中插入一行,我需要其中一列永远不会有前导/尾随空格。如果表被大量使用,那么使用触发器会导致大量开销延迟吗?如果可以的话有没有更好的办法?

INSERT INTO MyTable (item, qty) VALUES (' test ', 2)
SELECT item FROM MyTable

上面应该返回“test”而不是“test”。

sql-server sql-server-2008
1个回答
0
投票

触发器一个选项,但通常不是您首先想要达到的目标。

触发器确实会带来开销,恕我直言,更重要的是,会带来复杂性。触发器通常不是人们经常期望出现在桌面上的东西,因此在故障排除或性能改进期间它们可能会被忽视。在我的整个职业生涯中,我想我可能编写了两个触发器,这些触发器都是针对非常奇怪的情况的。所以是的,这是一个选择,但我认为你最好以不同的方式解决这个问题。

通常,如果您可以在数据传入时对其进行清理,情况会好得多。如果您有一个插入数据的存储过程,只需在插入数据时 tun

ltrim(rtrim(myvalue))
即可,它会去除前导/尾随空格(或在更高版本的 sql 版本上为
trim(myValue)
)。

此外,如果字段不能有前导或尾随空格,制定约束来强制执行!。像

constraint MyCheckConstraint check (item not like ' %' and item not like '% ')
这样的检查约束将保证您永远不会有任何带有前导/尾随空格的行。

当然,它保证这一点的方式是在尝试这样做时抛出异常,这就是为什么在插入过程中清理这些值如此重要。

我认为触发器是正确解决方案的唯一情况是,如果您直接从原始文件获取此数据,并且在加载过程中没有任何时间点在获取文件之间并且,比如说,将其放入数据库中进行清理。即便如此,我的建议是将“脏”数据加载到临时表中,然后运行 SQL 来清理数据并将其插入到实时表中。

    

© www.soinside.com 2019 - 2024. All rights reserved.