代码之家  ›  专栏  ›  技术社区  ›  Cunners

我应该采取什么方法来拆分字符串并更新多个SQL表?

  •  2
  • Cunners  · 技术社区  · 16 年前

    我有一个具有以下属性的文章对象:

    • 物品名称(varchar)
    • 文章正文(varchar)
    • 文章标签(varchar)

    文章标记是一个由空格分隔的文本值字符串,用户用它标记了算术。将3个属性传递给存储过程。

    我现在想做以下工作:

    1)在dbo.articles表中插入项目名称和项目正文,并返回项目ID

    2)在dbo.tags表中将项目标记字符串的每个值作为单独的行插入,但首先检查是否重复。如果重复,则返回现有记录的TagID;如果新记录,则返回新的TagID。

    3)在dbo.tagmap表中将项目ID和每个tagid作为单独的行插入。

    我需要知道如何做到这一点的最佳方法,同时也要意识到它在性能上不会花费太多。

    提前感谢您提供的任何帮助。

    2 回复  |  直到 16 年前
        1
  •  4
  •   Ben Griswold    16 年前

    我将在您的应用程序中而不是在SQL中完成大部分工作。您可以使用联机找到的许多SQL拆分例程中的一个与交叉应用一起向表中添加多行,但我不会这样做。保持简单,让您的应用程序管理标签插入。

    假设你有一篇文章有5个标签。这是一个数据库调用,用于创建文章并将文章ID返回到应用程序(问题中的步骤1),然后,对于每个标记,在处理步骤2和步骤3的单独数据库调用中提供文章ID和标记值。对于一篇标签数量很可能超过平均值的文章,您可以很快地看到6个标签,而不是所有复杂的操作。真的没那么糟。

    但那只是我的两分钱。希望能有所帮助。

        2
  •  2
  •   JP Alioto    16 年前

    就个人而言,我将把标记作为XML传递,而不是原始字符串。但是,我更喜欢SQL Server的XQuery功能,而不是原始TSQL字符串解析。我所说的方法类型在 Passing lists to SQL Server 2005 with XML Parameters .其余都是标准的 "insert if not exists" logic .这方面还有一点 SQL Server: Best way to Update row if exists, Insert if not . 他们正在处理更新,但逻辑是相似的。