2

次のコードを使用して、400 程度の一意の値を持つ列をピボットしようとしています。

       Declare @t VARCHAR(10)
       Declare @A VARCHAR(1000)
       Declare @B VARCHAR(1000)
       set @A='SELECT Name, IRIS_ID__c'
       SET @B='('
       SELECT @A=@A+',['+Question_Concept_With_ImpactArea__c+'] as ['+Question_Concept_With_ImpactArea__c+']',@B=@B+'['+Question_Concept_With_ImpactArea__c+']'
       FROM (SELECT DISTINCT Question_Concept_With_ImpactArea__c 
             FROM  Company_Number_Response)  cur
       -- removing last ',' from both variables
       SET @B=SUBSTRING(@B,1,LEN(@B)-1)
       SET @A=@A+ + '    
       FROM 
          (SELECT NAME,  IRIS_ID__c, Selected, Question_Concept_With_ImpactArea__c                           
          FROM Company_Number_Response) s  PIVOT (max(Unified_Response__c) 
          FOR  Question_Concept_With_ImpactArea__c IN ' +@B+')) p ORDER BY [IRIS_ID__c];'
      exec(@A);

このコードを実行すると、「文字列 'CM_PcCOGSSup' の後の引用符が閉じていません 'CM_PcCOGSSup' 付近の構文が正しくありません

最後のコマンドを exec から print に変更すると、多くの値が読み取られていることがわかりますが、ステートメントは上記のエラーの値で単に途切れています。データを確認しましたが、これを引き起こす文字は見当たりません。さらに、結果が長すぎるのではないかと考え、結果のテキストの最大数を 8192 に変更しました。

どんな助けでも大歓迎です。

4

2 に答える 2

2

SQL Server 2005 以降を使用していると仮定して、変数宣言を に変更しますvarchar(max)。のみを指定したため、途切れています。varchar(1000)文字列の連結では、データ型が自動的に長くなることはありませんchar。切り捨てられます。

SQL 2000 では、varchar(8000). それ以上の時間が必要な場合は、創造力を働かせる必要があります。これはかなり難しい作業です。

あなたも持っていSET @A=@A+ + 'ます。それが機能している場合、それは私にとって驚きですが、いずれにせよそこには 1 つしかないはず+です。

sysnameまた、列を有効なデータ型にするために、列を角かっこで囲むだけではいけません。QuoteName次の関数を使用する必要があります。

SELECT @A = @A + ',' + QuoteName(Question_Concept_With_ImpactArea__c) ...
于 2013-06-13T20:07:57.353 に答える