2016-10-20 5 views
-2

EXECUTE sp_executesqlを使用してスクリプトを実行すると、ピボットでパラメータを与える方法に関するクエリがあります。上記のクエリでMS SQL Serverのピボットクエリでparamterを使用したEXECUTE sp_executesqlを使用する

DECLARE @FactorText AS NVARCHAR(MAX) 
DECLARE @RequestID AS NVARCHAR(MAX) 

    SELECT @FactorText = COALESCE(@FactorText + '], ', '') + CAST('[' + FactorText AS NVARCHAR(MAX)) 
    FROM (
     SELECT DISTINCT FactorText 
     FROM QuoteHODFCreditDebit 
     where RequestId = @RequestID AND AppliedValue!=0.00 
    ) AS QuoteHODFCreditDebit 

    SET @FactorText = @FactorText + ']' 

    DECLARE @DynamicPIVOT AS NVARCHAR(MAX) 
    DECLARE @ParmDefinition AS NVARCHAR(MAX) 
    SELECT @DynamicPIVOT = 'SELECT @FactorText 
      FROM 
      (
       SELECT case 
        when(appliedValue < 0) then quotename(convert(nvarchar(100), ABS(AppliedValue)),''('') 
        else CONVERT(nvarchar(100),AppliedValue) 
        end as AppliedValue, FactorText FROM 
        QuoteHODFCreditDebit where RequestId = @ResRequest 
        and appliedValue!=0.00 
      ) CreditDebitFactor 
      PIVOT (
       MAX(AppliedValue) FOR FactorText IN (@FactorText) 
      ) Result;' 

SET @ParmDefinition = N'@ResRequest NVARCHAR(MAX),@FactorText NVARCHAR(MAX)'; 

EXECUTE sp_executesql @DynamicPIVOT, @ParmDefinition, @ResRequest = @RequestID, @FactorText = @FactorText; 

、@ResRequestパラメータは任意のエラーは発生しませんでしたが、パラメータとして@FactorTextは、エラーが発生しました。

エラー: '@FactorText'付近の構文が正しくありません。

このクエリを解決してください。

要件のサンプルがある場合は投稿できます。

すべてのSQLマジシャンに感謝します。

+1

なぜすべてのことDBMSタグ:ここで

は、動的SQLでそれを行う方法ですか? – Aleksej

+1

すべてのDBMSにタグを付けないように注意する必要があります。これは明らかにSQL Serverです。エラーの原因は、@FactorTextが動的SQLのスコープ外であるためです。 –

+0

IN節または選択リストで変数を使用することはできません – Hogan

答えて

1

in節またはselectリストで変数を使用することはできません。あなたができれば、動的SQLはまったく必要ありません。

現在のバージョンのSQL Serverを使用していた場合は、動的SQLではなく関数呼び出しでこれを行うことができます。

SELECT @DynamicPIVOT = 'SELECT '[email protected]+' 
      FROM 
      (
       SELECT case 
        when(appliedValue < 0) then quotename(convert(nvarchar(100), ABS(AppliedValue)),''('') 
        else CONVERT(nvarchar(100),AppliedValue) 
        end as AppliedValue, FactorText FROM 
        QuoteHODFCreditDebit where RequestId = @ResRequest 
        and appliedValue!=0.00 
      ) CreditDebitFactor 
      PIVOT (
       MAX(AppliedValue) FOR FactorText IN ('[email protected]+') 
      ) Result;' 

SET @ParmDefinition = N'@ResRequest NVARCHAR(MAX)'; 

EXECUTE sp_executesql @DynamicPIVOT, @ParmDefinition, @ResRequest = @RequestID; 
関連する問題