将存储过程中的数据填充到数据表中
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 不会填充