sql - 在cte查询sql server 2008中初始化和增加变量

标签 sql sql-server sql-server-2008 common-table-expression

我正在使用 sqlserver 2008,我想在第二部分(问题线)中同时初始化和递增变量 (@NUMTwo)。

我正在创建一个 cte 查询。

这可能吗?如果可以,请告诉我。

以下是一个示例。希望我很清楚。

CREATE table #TempTable 
(
childProductID  INT,parentProductID INT,productModel varchar(50),[Num2] VARCHAR(100)
)

DECLARE @NUMTwo  INT = 0
WITH tableR   AS    
 (

        -- First Part
    SELECT childProductID = null,parentProductID=null,productModel  from Products where productid in (@a),[Num2] = convert(varchar(100), '')
            UNION ALL
            --Second Part            
    SELECT e.childProductID,e.parentProductID,prd.productModel FROM ProductIncludes AS e  
            ,[Num2] = convert(varchar(100),'1.'  + @NUMTwo+=1 )    -- Problem line
    INNER JOIN  Products AS PRD ON e.childProductID = PRD.productID      
    WHERE parentProductID in (@a)  

      )

INSERT INTO #TempTable(childProductID,parentProductID,productModel,[Num2])
SELECT childProductID,parentProductID,productModel,[Num2]

END 
SELECT * FROM #TempTable

最佳答案

您需要在查询的 acnhor 部分“初始化”一列,然后在递归部分“增加”此列。

类似于

DECLARE @NUMTwo  INT = 0
;WITH Test AS (
    SELECT  [Num2] = convert(varchar(MAX), ''),
            @NUMTwo [N] 
    UNION ALL
    SELECT  [Num2] = '1.'  + convert(varchar(MAX),[N]+1),
            [N]+1
    FROM    TEst
    WHERE   [N] < 10
)
SELECT  *
FROM    Test

SQL Fiddle DEMO

关于sql - 在cte查询sql server 2008中初始化和增加变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12668468/

相关文章:

mysql - 限制,选择UNION重复检查列

php - 用于查找和替换的 SQL 查询不起作用

sql - 如何查询值为 >= 60000 的子字符串

sql-server - 如何更改 SQL Server 全文索引中的分词符

sql-server-2008 - MDX 中的交集

sql - 在数组列上查找重复值

sql-server - 如何在SQL Server中输出并发用户数

sql - 如何将结果分组为一行

sql-server - 如何使用 ssis 2008 遍历 excel 文件并获取工作表名称

php - 使用 sqlsrv 切换数据库的正确方法是什么?