2014-01-30 57 views
0

在我的存儲過程中,我通過調用使用CURSOR/FETCH的自定義函數,使用它自己的一組列表項來填充變量[MyVariable]。SQL CURSOR將列表項目打包到一個變量中......但需要更多

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> 

謝謝你的幫忙!

//////////續解釋

我有一個存儲過程,而從查詢表產品的產品列表。這些產品的評論存儲在評論表中。在我的存儲過程中,我選擇了關於產品的所有信息,然後我需要將ul,li等完整的html代碼傳遞給[Comment]變量。我已經用光標/抓取成功完成了這個,但是我讀得越多,我聽到的就是一個糟糕的主意。

我想要把它帶到下一個級別的是在父註釋內部有子註釋,所以我最初的想法是從第一個內部調用另一個遊標函數根據父註釋需要加載,但是聽起來好像有一個更好的方法。

因此,可以說我的最終結果是:

<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>  

但同樣,我需要傳遞迴我的主要SPROC這一切都在一個[評論]變量。我可以通過AJAX輕鬆地完成孩子的評論,但是更願意從服務器上運行它們。

+0

***爲什麼***在地球上使用光標?你應該把你的努力付諸**清除那個光標!我幾乎100%確定這可以完成**沒有一個蹩腳的,性能殺戮遊標...... –

+0

在等待迴應時,我偶然發現了多條強化您的評論的文章。我很樂意使用更好的方法。我只是不確定要走向何方。在SPROC中,我返回了數據列表。在該數據列表中,其中一個變量用於評論。如果他們存在,我需要這些評論以包括兒童評論。我需要將所有這些都打包成一個最終變量,因此在函數中生成HTML是必要的,有些評論沒有回覆,而另一些則是。 – user1447679

+0

@marc_s我擴展了我的解釋......不確定它是否有幫助。希望如此。我想使用任何最適合此目的的方法。感謝您的答覆。 – user1447679

回答

1

我經歷了一個痛苦的學習過程,沒有睡覺,我想出了我的解決方案!響應時間也非常快。

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, '&lt;', '<'), '&gt;', '>'); 



RETURN @Comments 

END 



GO 

第一個在第一個函數中調用的函數與此函數相同,但返回的是回覆。我不得不使用REPLACE來維持HTML格式,否則XML安全地將其刪除。

任何人都有比這更好的解決方案?到目前爲止,這使我能夠在單個SQL變量中打包父級和子級的分層列表。

相關問題