2
我有三張表; tblProducts和tblOption和tblOptionValue。 (T-SQL)連接動態SQL列
我得到使用此查詢我的產品的所有可能的組合:
DECLARE @ProductId INT, @Query NVARCHAR(MAX), @ProductOptionGroupId INT
SET @ProductId = 69
SET @Query = ''
DECLARE CC CURSOR FOR
SELECT DISTINCT OptionID
FROM tblOption
WHERE ProductId = @ProductId
OPEN CC
FETCH NEXT FROM CC INTO @ProductOptionGroupId
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Query = @Query + '(SELECT DISTINCT tblOptionValue.Name FROM tblOptionValue INNER JOIN tblOption on tblOptionValue.OptionID = tblOption.OptionID WHERE tblOptionValue.OptionId='+CAST(@ProductOptionGroupId AS VARCHAR)+'AND tblOption.ProductId='+CAST(@ProductId AS VARCHAR)+
+') AS Table' + CAST(@ProductOptionGroupId AS VARCHAR)+' CROSS JOIN '
FETCH NEXT FROM CC INTO @ProductOptionGroupId
END
CLOSE CC
DEALLOCATE CC
SET @Query = 'SELECT * FROM ' + LEFT(@Query,LEN(@Query)-10)
PRINT @Query
EXEC sp_executesql @Query
發現here感謝@Lamak 我就適應我的數據庫,但我需要:
A)找到一個方法來把所有數據傳回在一列中,而不是多列
B)命名tblOptionValue.Name列同相關tblOption.Name場
關於我如何實現上述目標的想法?
非常感謝
更新:我設法實現自己的目標,使用下面的查詢:
DECLARE @ProductId INT, @Query NVARCHAR(MAX), @ProductOptionGroupId INT, @cName VARCHAR(300)
SET @ProductId = 70
SET @Query = ''
DECLARE CC CURSOR FOR
SELECT DISTINCT OptionID
FROM tblOption
WHERE ProductId = @ProductId
OPEN CC
FETCH NEXT FROM CC INTO @ProductOptionGroupId
WHILE @@FETCH_STATUS = 0
BEGIN
set @cName = (SELECT Name FROM tblOption WHERE [email protected])
SET @Query = @Query + '(SELECT DISTINCT tblOptionValue.Name as '[email protected]+' FROM tblOptionValue INNER JOIN tblOption on tblOptionValue.OptionID = tblOption.OptionID INNER JOIN tblProduct on tblOption.ProductID=tblProduct.ProductID WHERE tblOptionValue.OptionId='+CAST(@ProductOptionGroupId AS VARCHAR)+'AND tblOption.ProductId='+CAST(@ProductId AS VARCHAR)+
+') AS Table' + CAST(@ProductOptionGroupId AS VARCHAR)+' CROSS JOIN '
FETCH NEXT FROM CC INTO @ProductOptionGroupId
END
CLOSE CC
DEALLOCATE CC
SET @Query = 'SELECT t2.*, t1.* FROM (SELECT * FROM ' + LEFT(@Query,LEN(@Query)-10)
SET @Query = @Query + ') as t1,
(SELECT * FROM tblProduct WHERE ProductID=70) as t2'
PRINT @Query
EXEC sp_executesql @Query
我真的沒有看到光標的需要。 – ingo 2011-06-14 18:50:10
@ingo感謝您的反饋,我並不完全確定我需要光標。然而,我沒有其他想法如何構建我的查詢來實現我所需要的。有什麼建議麼?謝謝 – Leigh 2011-06-15 11:00:28
嘗試將其寫爲「正常」查詢。我很樂意從那裏幫助你 – ingo 2011-06-15 21:07:30