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