无法将CTE结果放入临时表

时间:2016-06-23 05:56:36

标签: sql-server tsql

我有一个SP,我需要将CTE结果放到临时表中,以便稍后在SP中使用临时表。因为我是新人,所以我遇到了困难。请帮帮我。

CREATE TABLE #TempTable1 (
    tmp_id              INT         NULL,
    tmp_parent_id       INT         NULL,
    temp_level          VARCHAR(50) NULL,
    temp_order          VARCHAR(50) NULL,
    temp_promoter_ID    INT         NULL
);    

DECLARE @promoterid INT = (
    SELECT
        p.promoterid
    FROM dbo.Promoters p
    INNER JOIN dbo.UserProfile u
        ON u.UserId = p.UserProfileId
    WHERE u.UserName = @Username
);

;WITH Empl_Tab (Id, ParentId, LEVEL, [Order], promoterid) AS (
    SELECT
        promoters.UserProfileId AS ID,
        promoters.Level1 AS ParentID,
        0 AS LEVEL,
        CONVERT([VARCHAR](MAX), promoters.PromoterId) AS [Order],
        promoters.PromoterId
    FROM promoters
    WHERE Promoters.PromoterId = @promoterid
    UNION ALL
    SELECT
        p.UserProfileId AS ID,
        p.Level1 AS ParentID,
        Empl_Tab.LEVEL + 1 AS LEVEL,
        Empl_Tab.[Order] + CONVERT([VARCHAR](30), p.PromoterId) AS [Order],
        p.PromoterId
    FROM Promoters p
    INNER JOIN Empl_Tab
        --inner join dbo.UserProfile u on u.UserId= Promoters.UserProfileId
        ON Empl_Tab.promoterid = p.Level1
    --where p.Active!=2
)
--select Id, ParentId, LEVEL,[Order],promoterid from Empl_Tab

INSERT INTO #TempTable1     --(tmp_id, tmp_parent_id, temp_level, temp_order, temp_promoter_ID )
    SELECT *
    FROM Empl_Tab;

现在我想将Emp1_Tab结果放到临时表中,并希望稍后在同一个SP中使用临时表数据。

1 个答案:

答案 0 :(得分:2)

  

程序TeamCustomersListNew,第42行将截断字符串或​​二进制数据。

以上错误消息指出您插入的值之一超出了最大长度。临时表的temp_order列仅允许50个字符。您可能希望增加它或使用VARCHAR(MAX)代替:

CREATE TABLE #TempTable1 (
    tmp_id              INT          NULL,
    tmp_parent_id       INT          NULL,
    temp_level          INT          NULL,
    temp_order          VARCHAR(MAX) NULL,
    temp_promoter_ID    INT          NULL
);   

此外,temp_level应为INT