【问题标题】:Replace Character in String with SQL Server Table Trigger on Insert\Update在 Insert\Update 上用 SQL Server 表触发器替换字符串中的字符
【发布时间】:2016-02-15 08:19:00
【问题描述】:

**已回答

我正在尝试创建一个触发器,当用户从我们的网站插入或更新新数据时,该触发器将用适当的撇号 ' 替换字符 (MS Word 智能引用)。

特殊撇号可以在 5000 NVarchar 列的任何位置找到,并且可以在同一字符串中多次找到。

有什么简单的替换语句吗?

REPLACE(Column,'’','''')

【问题讨论】:

  • 我建议您制作一个标量函数,以 nvarchar(5000) 作为输入,使用循环替换并返回 nvarchar(5000) 值。然后在你的触发器中使用这个函数。
  • @Adish 为什么建议创建标量函数和循环?这是绝对最慢的方法。 OP 发布的替换语句将比具有另一个性能终止循环的性能终止标量函数要好得多。
  • 我会使用您发布的 REPLACE。它将用 ' 替换所有 ' 实例,并且速度非常快。
  • @SeanLange 是的,你是对的。我的建议不正确。我正在考虑一种场景,其中有连续字符被相同/另一个字符的一个实例替换,例如 4 个空格或 3 个空格被 1 个空格替换。这不是这里的要求。感谢您指出。
  • 即使有多个空格,您也可以在没有任何循环的情况下做到这一点。 :) 如果你需要这种技术,你可以在这里阅读。 sqlservercentral.com/articles/T-SQL/68378

标签: sql sql-server regex


【解决方案1】:

我要说的是,您可能应该考虑在您的应用程序中而不是在 SQL Server 中执行此操作。这不是您要寻找的答案 - 但它可能更有意义。

通常,当我看到这样的问题时,我会立即担心开发人员试图“击败”SQL 注入。如果是这种情况,这种方法将永远行不通 - 根据:

http://sqlmag.com/database-security/sql-injection-beyond-basics

也就是说,如果您不专注于此并且只需要摆脱“讨厌”的字符,那么 REPLACE() 将起作用(并且可能是您的最佳选择),但我仍然认为您'从您的应用程序中解决此类“格式化”问题可能会更好。或者换句话说,将 SQL Server 视为您的数据存储库 - 存储您的原始数据的东西。然后,如果您需要为各种输出/显示使其“漂亮”或“调整”它,然后通过您的应用程序在向您的用户输出的过程中执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2020-10-15
    相关资源
    最近更新 更多