2016-04-22 19 views
0
declare @sql6 nvarchar(max) = '' 

set @sql6 = @sql6 + ' CODE' 

EXEC sp_executesql @SQL6 

このように動的SQLを宣言すると切り捨てられることはありますか?動的SQLがnvarchar(max)になっているにもかかわらず切断されています

それがよりたくさんあるべき
GROUP BY 
    T1.TreatmentID, T1.SamplingRandomNumber, 
    T1.ProductID, T1.OptimizationGroupID, 
    T1.CurrencyCode, C.CalculatedFromText, 
    T1.TreatmentOrdinal, T1.SourceCode, 
    T1.[IsPriorBoo 

それは、コードの束で、テキストの壁をペーストしたいのですが、print文が終わるといけません。

エラーが

付近に正しくない構文です ''。

(広いダイナミッククエリ内の)クエリの特定部分の完全なコードは

SELECT 
    T1.TreatmentID, 
    T1.SamplingRandomNumber, 
    T1.ProductID, 
    T1.OptimizationGroupID, 
    T1.CurrencyCode, 
    C.CalculatedFromText, 
    CONVERT(FLOAT,COUNT(1)) CountCalculatedFromText, 
    T1.TreatmentOrdinal, 
    Sum(T1.Revenue) AS Revenue, 
    T1.SourceCode 
    '+replace(@ColumnsPB,'t.','T1.') +' 
INTO 
    #RevenueDetailCount 
FROM 
    #RevenueDetailCountTmp T1 
INNER JOIN 
    #CalculatedFromText C ON T1.ProductID = C.ProductID 
          AND T1.OptimizationGroupID = C.OptimizationGroupID 
          AND T1.TreatmentOrdinal = C.TreatmentOrdinal 
          AND T1.SamplingRandomNumber = C.SamplingRandomNumber 
GROUP BY 
    T1.TreatmentID, 
    T1.SamplingRandomNumber, 
    T1.ProductID, 
    T1.OptimizationGroupID, 
    T1.CurrencyCode, 
    C.CalculatedFromText, 
    T1.TreatmentOrdinal, 
    T1.SourceCode 
    '+replace(@ColumnsPB,'t.','T1.') +' 

編集: フル印刷動的SQL

DECLARE @CalculatedFromText AS TABLE 
(
    CalculatedFromText varchar(100), 
    CalculatedFrom  smallint 
) 

INSERT INTO @CalculatedFromText 
( 
    CalculatedFromText, 
    CalculatedFrom 
) 
VALUES 
    ('Control' ,1), 
    ('Treatment' ,2), 
    ('Dynamic' ,3) 




select 
    TP.TreatmentID, 
    TP.ProductID, 
    TP.OptimizationGroupID, 
    MIN(TP.CalculatedFromText) AS CalculatedFromText, 
    TP.TreatmentOrdinal, 
    TP.SamplingRandomNumber, 
    TP.CurrencyCode, 
    TP.SourceCode 
    , TP.[IsPriorBooking] 
INTO #CalculatedFromText 
FROM #CalculatedFromTextTmp TP 
GROUP BY 
    TP.TreatmentID, 
    TP.ProductID, 
    TP.OptimizationGroupID, 
    TP.TreatmentOrdinal, 
    TP.SamplingRandomNumber,  
    TP.CurrencyCode , 
    TP.SourceCode 
    , TP.[IsPriorBooking] 



SELECT 
    SamplingRandomNumber, 
    TreatmentID, 
    CalculatedFromText, 
    ProductID, 
    OptimizationGroupID, 
    CONVERT(FLOAT,COUNT(1)) AS CountCalculatedFromText, 
    TreatmentOrdinal, 
    CurrencyCode, 

    SourceCode 
    , [IsPriorBooking] 
INTO #CountCalculatedFromText 
FROM #CalculatedFromText 
GROUP BY 
    SamplingRandomNumber, 
     TreatmentID, 
     CalculatedFromText, 
     ProductID, 
     OptimizationGroupID, 
     TreatmentOrdinal, 
     CurrencyCode, 
     SourceCode 
     , [IsPriorBooking] 
SELECT 
    SamplingRandomNumber, 
    TreatmentID, 
    ProductID, 
    OptimizationGroupID, 
    SUM(CountCalculatedFromText) AS AllCalculatedFromText, 
    CurrencyCode, 

    SourceCode 
    , [IsPriorBooking] 
INTO #AllCalculatedFromText 
FROM #CountCalculatedFromText AS cps2 
GROUP BY 
    SamplingRandomNumber, 
    TreatmentID, 
    ProductID, 
    OptimizationGroupID, 
    CurrencyCode, 
    SourceCode 
    , [IsPriorBooking] 


SELECT 
    CPS.SamplingRandomNumber, 
    CPS.TreatmentID, 
    CPS.CalculatedFromText, 
    CPS.TreatmentOrdinal, 
    CPS.ProductID, 
    CPS.OptimizationGroupID, 
    CPS.CountCalculatedFromText, 
    CPS.CountCalculatedFromText/T.AllCalculatedFromText AS PercentCalculatedFromText, 
    CPS.CurrencyCode, 
    CPS.SourceCode 
    , CPS.[IsPriorBooking] 
INTO #PercentCalculatedFromText 
FROM #CountCalculatedFromText AS CPS 
    INNER JOIN #AllCalculatedFromText T ON 
    T.TreatmentID=CPS.TreatmentID AND T.ProductID = CPS.ProductID 
     AND T.OptimizationGroupID = CPS.OptimizationGroupID 
     AND T.CurrencyCode = CPS.CurrencyCode 

SELECT 
    T.SamplingRandomNumber, 
    T.TreatmentID, 
    T.ProductID, 
    T.OptimizationGroupID, 
    T.TreatmentOrdinal, 
    T.CurrencyCode, 

    CASE WHEN T.CalculatedFromText = 2 THEN PS.CalculatedFromText + ' + CAST(T.TreatmentOrdinal AS char) 
     ELSE PS.CalculatedFromText END AS PricingType, 
    T.CalculatedFromText, 
    T.CountCalculatedFromText AS QuantityLooks, 
    T.PercentCalculatedFromText AS LooksPercentageOfTransactions, 
    T.SourceCode 
    , T.[IsPriorBooking] 
INTO #CountCalculatedFromTextPivot 
FROM #PercentCalculatedFromText T 
    INNER JOIN @CalculatedFromText AS PS ON T.CalculatedFromText = PS.CalculatedFrom 



SELECT 
    T1.TreatmentID, 
    T1.ProductID, 
    T1.GroupCode, 

    T1.OptimizationGroupID, 
    CASE WHEN T1.CalculatedFrom = 2 THEN T1.TreatmentOrdinal ELSE 0 END AS TreatmentOrdinal, 
    T1.CurrencyCode, 
    T1.SamplingRandomNumber, 
    T1.Revenue Revenue, 
    T1.SourceCode 
    , T1.[IsPriorBooking] 
INTO #RevenueDetailCountTmp 
FROM #TreatmentDetails T1 
WHERE T1.Stage=2 

SELECT 
    T1.TreatmentID, 
    T1.SamplingRandomNumber, 
    T1.ProductID, 
    T1.OptimizationGroupID, 
    T1.CurrencyCode, 

    C.CalculatedFromText, 
    CONVERT(FLOAT,COUNT(1)) CountCalculatedFromText, 
    T1.TreatmentOrdinal, 
    Sum(T1.Revenue) AS Revenue, 
    T1.SourceCode 
    , T1.[IsPriorBooking] 
INTO #RevenueDetailCount  
FROM #RevenueDetailCountTmp T1 
    INNER JOIN #CalculatedFromText C ON T1.ProductID = C.ProductID 
     AND T1.OptimizationGroupID = C.OptimizationGroupID 
     AND T1.TreatmentOrdinal = C.TreatmentOrdinal 
     AND T1.SamplingRandomNumber = C.SamplingRandomNumber 
GROUP BY 
    T1.TreatmentID, 
    T1.SamplingRandomNumber, 
    T1.ProductID, 
    T1.OptimizationGroupID, 
    T1.CurrencyCode, 
    C.CalculatedFromText, 
    T1.TreatmentOrdinal, 
    T1.SourceCode 
    , T1.[IsPriorBoo 
+0

'varchar型:

は、クエリの短いビット表示では、あなたが実際にあなたのTHENクエリの少なくともその一部を壊しているの最初の部分で、ここで余分な引用符を持っています(最大) 'は8000文字に上っています。編集:私は間違っている - それが大きくなる可能性があります。 –

+1

@SeanCoetzee:varchar(max)は、各文字が2バイトを使用しているので、** 20億**の文字数を持ちます(そして、nvarchar(max)は半分です) –

+0

nvarchar(max)私はそれを空の文字列に設定してからその文字列に追加する限り、どこかで読んだことがあります。 –

答えて

0

おそらく、ここでは2つの問題があります。 PRINT文を参照します。これは8000バイト(nvarcharを使用しているので4000文字)で終了します。 SSMSでクエリ全体を表示したい場合は、出力するためにXMLにキャストするのが最適です。SSMSでクリックして全体を表示できるフィールドが表示されます。私は信じて

CASE WHEN T.CalculatedFromText = 2 THEN PS.CalculatedFromText + ' + CAST(T.TreatmentOrdinal AS char) 
+0

ああ、理にかなって、病気がいくつかのより多くのテストを行う必要があります。ありがとう –

関連する問題