2010-12-16 54 views
1

我正在遍歷產品數據集以查找SKU,其中產品名稱的前六個字符與sku @itemno相同,然後將它們連接成一個CSV字符串作爲數據集的一部分用於上傳到電子商務平臺。以下是相關操作:建議在SQL Server 2005中對CURSOR操作進行一些替代操作

DECLARE c1 CURSOR READ_ONLY 
FOR 
SELECT sku FROM tbl WHERE name LIKE (SELECT LEFT(name,6) FROM tbl WHERE sku = @itemno) + '%' 

OPEN c1 
FETCH NEXT FROM c1 
INTO @c1 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @associated = @associated + @c1 + ',' 
    FETCH NEXT FROM c1 
    INTO @c1 
END 

正如您可以想象的,考慮到15,000+條記錄的數據集大小,這是非常緩慢的。當然,有一種更優雅的方式來使用PIVOT或其他東西來做到這一點?

回答

3

的SQL Server 2005年起:

select 
    stuff( 
    (select ', ' + sku 
    from tbl 
    WHERE name LIKE (SELECT LEFT(name,6) FROM tbl WHERE sku = @itemno) + '%' 
    for xml path('') 
    ) 
    , 1, 2, '') as namelist; 
3

嘗試像

DECLARE @Val VARCHAR(MAX) 
SELECT @Val = COALESCE(@Val + ',','') + sku 
FROM tbl 
WHERE name LIKE (
         SELECT LEFT(name,6) 
         FROM tbl 
         WHERE sku = @itemno) + '%' 
+0

+1。 COALESCE也不錯.... – 2010-12-16 07:44:22

+0

也給你+1。對於單個值的返回,stuff/xml方法似乎有點多。我確實使用它來分組,雖然X-) – 2010-12-16 07:46:06

+0

這個問題在這裏回答:http://stackoverflow.com/questions/455423/how-to-turn-one-column-of-a-table-into-a-csv -string式-SQL服務器不-使用-A – Drew 2010-12-16 08:36:36