2016-06-23 2 views
0

私はCTEの結果を一時テーブルに入れる必要があるので、後でSPで一時テーブルを使用することができます。私は新しいので、私は困難を経験している。私を助けてください。一時テーブルにCTEの結果を入れることができません

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の後の一時テーブルのデータを使用したいです。

+0

ここで問題は何ですか?エラーメッセージはありますか? –

+0

まず、私は、Emp1_Tabデータが一時テーブルに割り当てられているかどうかわかりません。第2回私は合計spを実行しているときにエラー "メッセージ8152、レベル16、状態10、プロシージャTeamCustomersListNew、行42を与えています 文字列またはバイナリデータが切り捨てられます。 – Sam

答えて

2

手順TeamCustomersListNew、Line 42文字列またはバイナリデータが切り捨てられます。

上記のエラーメッセージには、挿入する値の1つが最大長を超えていると記載されています。テンポラリテーブルの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_levelINTする必要があります。

+0

ありがとう@Felix、それは働いた:-) – Sam

関連する問題