【问题标题】:Create a two dimensional array in a stored procedure in SQL Server in CSV format在 SQL Server 的存储过程中以 CSV 格式创建二维数组
【发布时间】:2015-04-26 13:14:11
【问题描述】:

我知道存储过程中不存在数组格式,更不用说二维数组了。但是我使用 CSV 字符串来存储使用逗号分隔符的数组的值。我的主要问题是我是否可以在另一个分隔符的帮助下以相同的方式以二维格式存储我需要的值。如果是,任何人都可以指导我以正确的方式做到这一点吗?

我的桌子是这样的......

    UserID    |   ItemID
  ---------------------------
    User1         1 
    User1         2 
    User2         3 
    User2         1

我需要的是创建一个二维结果,我为每个项目存储请求它的用户。所以我想创建一个这样的csv字符串......

   "1:User1,User2,2:User1,3:User2"

类似于格式的东西是可能的,在存储过程中创建它并将字符串拆分为 c# 中的二维数组。

【问题讨论】:

  • 不要去那里。使用一个表来实现类数组结构,或者使用 2 个具有 1 对多关系的表来实现一个锯齿状数组类结构。几乎在任何情况下都应该避免在数据库表中保留分隔字符串(在我 16 年的编程中,只有一次我选择将值作为分隔字符串存储在数据库中,这只是因为我将它们用作数据库之外的分隔字符串)。
  • 我不想将字符串存储在数据库中。我只需要在存储过程中创建一个这样的字符串并将其传递给我可以解释为二维数组的 c# 代码。如何做到这一点??
  • 也不要去那里。使用 select 语句填充 DataTable 并将其转换为 c# 代码中的二维数组。在 c# 中做这种事情要容易得多,而且会比在 t-sql 中更快地工作。

标签: c# arrays sql-server csv


【解决方案1】:

如果您需要双向访问,您描述的 2D 数组会很好,但请记住,它可能非常稀疏并浪费大量内存。

如果您想使用您在 C# 中描述的数据,我会先查看Linq GroupBy。您可以轻松地将数据投影到 Dictionary<string, List<int>> 中,该 Dictionary<string, List<int>> 包含每个用户 ID 的所有项目 ID。

【讨论】:

  • 真的很感谢你为我指明了正确的方向我是 Linq 概念的新手,即使花了几个小时试图弄清楚,我仍然无法理解如何实现 Linq 查询以及如何将我需要的结果存储在 IEnumerable 中。而且由于我使用的是 ADO.NET 实体模型,我是否需要创建您链接的帖子中提到的类。真的,我对发生的事情一无所知,请帮助我。
  • 嗨,Amalpriya,我很乐意为您提供帮助,但目前我很忙,所以很快就不能了,抱歉。祝你好运,GJ
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2012-05-25
相关资源
最近更新 更多