SQL游标将列表项打包到变量中。。。但需要更多
在我的存储过程中,我通过调用一个使用CURSOR/FETCH的自定义函数,用一组自己的列表项填充变量[MyVariable]SQL游标将列表项打包到变量中。。。但需要更多,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,在我的存储过程中,我通过调用一个使用CURSOR/FETCH的自定义函数,用一组自己的列表项填充变量[MyVariable] SQL: SELECT dbo.udf_GrabStuff(@ID) AS MyListItems <ul id="comments"> *** All of the li elements are from the fetch *** <li> <div>This is an item</div
SQL: SELECT dbo.udf_GrabStuff(@ID) AS MyListItems
<ul id="comments">
*** All of the li elements are from the fetch ***
<li>
<div>This is an item</div>
</li>
<li>
<div>This is another item</div>
</li>
</ul>
返回多个列表的最佳方法是什么,但所有列表都打包在同一个[MyVariable]中,这样我就可以返回这个列表了
<ul id="comments">
*** All of the li elements are from the fetch ***
<li>
<div>This is an item</div>
*** This item had children
<ul id="something">
<li>Child item</li>
<li>Child item</li>
</ul>
</li>
<li>
<div>This is another item</div>
</li>
</ul>
谢谢你的帮助
//////////继续解释
我有一个存储过程,它从Product表查询产品列表。这些产品的注释存储在注释表中。在我的存储过程中,我选择了所有关于产品的信息,然后我需要将ul、li等的完整html代码传递到一个[Comment]变量中。我已经成功地用cursor/fetch实现了这一点,但我读得越多,就听说这是个坏主意
我想做的是将其提升到下一个层次,在父注释中包含子注释,因此我最初的想法是从第一个游标函数中调用另一个游标函数,根据需要加载每个父注释,但听起来有更好的方法
让我们假设我的最终结果是:
<ul id="parentcomments">
<li id="parent1">
<div>This is a parent comment</div>
<ul id="childrenforparent1">
<li id="child1">
<div>This is a child comment</div>
</li>
</ul>
</li>
<li id="parent2">
... and so on
</ul>
但同样,我需要将这个多合一的[Comments]变量传递回我的主存储过程。我可以用AJAX轻松地做孩子们的评论,但我更愿意在运行时从服务器上呈现它们。经过一个痛苦的学习过程,我找到了我的解决方案,没有睡觉!响应时间也非常快
CREATE FUNCTION [dbo].[udf_GetParentComments]
(
@ProductID INT
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Comments VARCHAR(MAX)
SELECT @Comments = STUFF((SELECT ' ' +
'<li id="Comment_' + CAST(CommentID AS VARCHAR) + '"' + '>' +
CAST(Comment_Comment AS VARCHAR(MAX)) +
'<ul>' + CAST(dbo.udf_GetCommentReplies(CommentID) AS VARCHAR(MAX)) + '</ul>' +
'</li>'
FROM Product_Comment
FOR XML PATH('')), 1, 1, '')
SELECT @Comments = REPLACE(REPLACE(@Comments, '<', '<'), '>', '>');
RETURN @Comments
END
GO
在第一个函数中调用的第二个函数与此函数相同,但会返回回复。我不得不使用REPLACE来支持HTML格式,否则XML安全会将其删除
有人有比这更好的解决方案吗?到目前为止,这使我能够在单个SQL变量中打包父级和子级的分层列表 究竟为什么在这里使用光标?你应该努力消除光标!我几乎100%确信,在等待回复时,没有一个蹩脚的、破坏性能的光标,我可以做到这一点……我偶然发现了多篇文章来加强你的评论。我很乐意用一种更好的方法。我只是不知道该往哪个方向走。在存储过程中,我将返回数据列表。在该数据列表中,其中一个变量用于注释。我需要这些评论也包括儿童评论,如果他们存在。我需要将所有这些都打包到一个最终变量中,因此在函数中生成HTML是必要的,有些注释没有回复,而其他注释没有回复。@marc_s我扩展了我的解释。。。不确定这是否有用。希望如此。我想用任何最好的方法来达到这个目的。感谢您的回复。如果不深入了解您的数据模型,很难在此提供答案。也许你可以在一个简单的数据库中建立你的数据模型?创建表并填充几行数据?第一次使用SQL FIDLE:所以在上面示例的最后一部分中,我需要如何将数据返回到变量。我需要将HTML生成到一个变量中,这样才能足够聪明地为注释回复添加额外的内联UL(如果存在的话)。