【问题标题】:What approach should I take to split a string and update muliple SQL tables?我应该采取什么方法来拆分字符串并更新多个 SQL 表?
【发布时间】:2010-11-14 05:46:14
【问题描述】:

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

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

文章标签是用空格分隔的文本值字符串,用户用它来标记文章。这 3 个属性被传递给存储过程。

我现在想做以下事情:

1) 在 dbo.Articles 表中插入文章名称和文章正文,并返回文章 id

2) 在 dbo.Tags 表中插入文章标签字符串的每个值作为单独的行,但首先检查重复项。如果重复则返回现有记录的tagid,如果是新记录则返回新的tagid

3) 将文章 id 和每个 tagid 作为单独的行插入 dbo.TagMap 表中

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

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

【问题讨论】:

  • 您使用什么语言和 DBMS?
  • asp.net 3.5/vb.net 和 sql server 2008
  • 您是否需要通过存储过程在数据库中完成此操作,或者这可以是 .net 代码吗?
  • 我愿意在 .net 代码中这样做(实际上这是我开始的地方),但这是我真正开始挣扎的地方。我知道如何毫无问题地将值拆分并获取到数组中,但我不知道如何将该数组和其他值一起传递给 SQL 对象并将其全部传递给数据库,特别是考虑到数组可以有不同数量的值。

标签: c# asp.net sql vb.net


【解决方案1】:

我会在您的应用程序中而不是在 sql 中完成大部分工作。您可以使用在线找到的众多 sql 拆分例程之一与 CROSS APPLY 一起将多行添加到您的表中,但我不会这样做。保持简单,让您的应用程序管理标签插入。

假设您有一篇包含 5 个标签的文章。这是创建文章并将文章 ID 返回给您的应用程序的一个数据库调用(您的问题中的步骤 #1。)然后,对于每个标签,您在处理步骤 # 的单独数据库调用中提供文章 ID 和标签值2和步骤#3。您正在查看一篇文章的 6 个非常快速、完全不复杂的操作,该文章很可能具有大于平均数量的标签。这真的不是那么糟糕。

但这只是我的两分钱。希望对你有帮助。

【讨论】:

  • 我同意,您应该在应用程序本身中完成繁重的工作。我认为您可以在单个数据库调用中添加所有标签。
【解决方案2】:

就个人而言,我会将标签作为 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 中有更多内容。他们正在处理更新,但逻辑是相似的。

【讨论】:

    猜你喜欢
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    相关资源
    最近更新 更多