如何选择表作为字符串生成器,而不是在SQL中使用光标

问题描述 投票:0回答:1

我想知道是否有更快的方法来处理SQL中的以下代码。当前,我正在使用SQL游标进行选择并构建一个定界符值字符串,作为建议项的动态值?

这是SQL的代码段:

    begin
      set @cursor = cursor for 
      select top 5 Manufacturer,ManufacturerPartNumber,Description as ManufacturerDescription, CONVERT(money,Price) as Price,fms.Score  
      from Products_OurProducts_Products_View

      open @cursor 
      fetch next from @cursor 
      into @CURSOR_Mfr,@CURSOR_Model,@CURSOR_Desc,@CURSOR_Price,@CURSOR_Score

      while @@FETCH_STATUS = 0
        begin
          set @suggestionsStringBuilder += @CURSOR_Mfr + ',' + @CURSOR_Model + ',' + @CURSOR_Desc + ',' + convert(varchar(20),@CURSOR_Price) + ',' + convert(varchar(4),@CURSOR_Score) + '^'
          fetch next from @SuggestionsListCursor 

          into @CURSOR_Mfr,@CURSOR_Model,@CURSOR_Desc,@CURSOR_Price,@CURSOR_Score
        end

    insert into BASE (Manufacturer, ManufacturerOrig, ManufacturerPartNumber,ManufacturerPArtNumberOrig,ManufacturerDescription, QWDescription, Serial,AssetID,Price,Score,ItemType,MfrFound,ModelFound,trained, SuggestionList,LineNumberIn)
    values(@objectORIGMfr,@objectORIGMfr, @objectORIGModel, @objectORIGModel, @objectDescription, @objectDescription, '',@objectAssetID,'0.00',@topMaxScore,'NA','1','0',@trained,@suggestionsStringBuilder,@objectLineNumber)

    close @cursor
    deallocate @cursor
end

上面的代码试图建立一个定界符值的动态列,如下所示:

对象示例:

Mfr,
Model,
Price,
Score,
Description,
Suggestions = 'Mfr,Model,Desc,Price^Mfr,Model,Description,Price^

返回模型确实如下:

BaseMfr:Fluke,
BaseModel:Tb1,
BaseDescription:'Multi meter item',
BasePrice:120.00,
Suggestions: "Fluke, Tc1, 'Desc', '120.00' ^ 'Fluke', 'T11', 'Desc', 220.00"

我是否可以在不使用循环游标的情况下执行字符串生成器/游标部分?这背后的想法是我们发送要定价的商品。如果找不到该项目,那么我们将建立一个建议列表,以将其可能在系统中使用的内容带回用户,以便他们可以查看数据中是否有错字。

建议列表只是找到的行,用“,”分隔列,并用“ ^”分隔实体。

enter image description here

非常感谢!

sql sql-server cursor
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.