将存储过程中的数据填充到数据表中

Posted

技术标签:

【中文标题】将存储过程中的数据填充到数据表中【英文标题】:Filling as it is data from stored procedure to Datatable 【发布时间】:2015-07-09 11:25:37 【问题描述】:

我在将数据从存储过程填充到 DataTable 时遇到了奇怪的行为。

我填写的是:

存储过程的输出:

MINI COMBO   
     Coke Float   

Stuff 中通过在MINI COMBO 之后添加CHAR(13) 并在Coke Float 之前添加一些空间来构造。

填写后反映在DataTable

     Coke Float   
MINI COMBO   

这对我来说真的很新鲜,请帮忙。

提前致谢

【问题讨论】:

请提供更多信息:这些数据是由谁生成的?表格里填了谁? 提供你的代码,你试过什么?并更清楚地解释您需要什么。 我正在使用 SqlDataAdapter.fill 来填充我的 DataTable。 您的问题是结果的顺序与您期望的不同吗?请注意,除非您的查询指定和 ORDER BY 子句,否则排序是不确定的。如果您需要帮助,请发布您的代码。 SELECT TXNID, ItemName = STUFF( ( SELECT Case When Level > 0 Then Case When ItemName like '%(%' Then ','+ItemName Else '( '+ ItemName+' ' End Else CHAR( 13) + Space(Spaces * 5) + ItemName+' ' End FROM #ARLines_2 x1 WHERE TXNID = x.TXNID Order By Spaces FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar( max)'), 1, 2, '') FROM #ARLines_2 AS x GROUP BY ID 【参考方案1】:

这是一个订购问题。存储过程的输出顺序可能会因各种原因随时更改,除非您指定了 ORDER BY 语句。

例如:

SELECT TXNID, ItemName = STUFF( ( SELECT Case When Level > 0 Then Case When 
ItemName like '%(%' Then ','+ItemName Else '( '+ ItemName+' ' End Else CHAR(13) + Space(Spaces * 5) + ItemName+' ' End 
FROM #ARLines_2 x1 WHERE TXNID = x.TXNID Order By Spaces FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '') FROM #ARLines_2 AS x 
GROUP BY ID
ORDER BY ItemName DESC

不过,我怀疑您有某种层次顺序,希望在下拉菜单中显示。即父子关系。如果是这种情况,您需要在 order by 语句中包含某种层次结构标识符

【讨论】:

Hay sarin 我想知道数据已经在表中按顺序排序,所以我跳过了顺序。但是 Order by 对我有用。非常感谢。你能解释一下那里发生了什么 数据物理存储在表中的顺序与您从 SP 看到的输出顺序没有直接关系。它可能取决于不同的因素,例如索引(集群或非集群)、插入顺序、优化器在执行 SP 时使用的索引类型。保证顺序的唯一方法是指定 ORDER BY 语句。希望有帮助!如果有帮助,请将我标记为已回答并投票!

以上是关于将存储过程中的数据填充到数据表中的主要内容,如果未能解决你的问题,请参考以下文章

使用存储过程中的表名填充数据集

带有表类型参数的存储过程返回数据但 SqlDataAdapter 不会填充

使用 Oracle 存储过程中的 refcursor 值填充 C# 数据表

使用实体框架和存储过程进行并发检查

存储过程只插入一次数据

如何将存储过程中的多个结果存储到数据集中?