2011-11-15 50 views
6

私はテーブルの1つにtextデータ型を使用していますが、クエリにはPIVOTも使用しています。 MAX(AttributeValue)を使用できません。AttributeValueのタイプはtextです。次のエラーOperand data type text is invalid for max operator.を返します。 PIVOTaggregate関数を使用するように指定されているので、ここでどのように使用できますか。MAX(テキスト)が返すオペランドのデータ型のテキストが最大演算子で無効です。 in SQL Server 2008

編集: は、私はnvarchar(max)にデータ型を変換しようとしたポストhttp://msdn.microsoft.com/en-us/library/ms187993.aspx

を追いました。

ALTER TABLE dbo.MyTable 
ALTER COLUMN AttributeValue NVARCHAR(MAX) 

また、Full Text Searchオプションも使用する必要があります。 'AttributeValueのは、' 'text' のデータ型である場合は、私は次のエラー Cannot alter or drop column 'AttributeValue' because it is enabled for Full-Text Search.

SELECT 
[6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB 
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM MyTable PIVOT 
( MAX(AttributeValue) 
    FOR AttributeID IN 
    (
     [6B93119B-263B-4FED-AA89-198D26A3A3C4] 
     ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] 
    ) 
) ResultTable 

を取得します。次のエラーが表示されます。

オペランドのデータ型のテキストが最大演算子で無効です。

まあ、フィールドをnvarchar(max)にキャストしようとしました。それは別のタイプのエラーを与える(4行目)。

Incorrect syntax near '(' 

私は何かを見逃しましたか?

答えて

9

テキスト列をvarchar(max)にキャストできます。

select max(cast(AttributeValue as varchar(max))) 
from YourTable 

サブクエリでデータを変換できます。

SELECT 
[6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB 
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM (SELECT AttributeID, 
       CAST(AttributeValue as VARCHAR(MAX)) as AttributeValue 
     FROM MyTable 
    ) AS T 
    PIVOT 
( MAX(AttributeValue) 
    FOR AttributeID IN 
    (
     [6B93119B-263B-4FED-AA89-198D26A3A3C4] 
     ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] 
    ) 
) ResultTable 
+0

私の編集を参照してください:(。私はエラーが発生します。 – Rauf

2

私が覚えていることが正しい場合、SQL Serverのテキストでは多くのコマンドを実行できません。私が遭遇した唯一の(半分)解決策は、テキストを別のデータ型にキャストすることです。残念ながら、これはいくつかのコードを書いて、セクションに実際に格納されているテキストデータのみを扱うことを意味します。

プラス、テキストは、SQL Serverの将来のバージョンから削除されている: http://msdn.microsoft.com/en-us/library/ms187993.aspx

それでは、NVARCHAR(最大)に、列のデータ型を変更し、うまくいけば、クエリが正常に実行されます。

0

また、潜在的に非常に大きな文字列をキャスト避けるために、MAX()内DATALENGTH()を使用することができます。

SELECT 
    6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB 
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM MyTable PIVOT 
( MAX(DATALENGTH(AttributeValue)) 
    FOR AttributeID IN 
    (
     [6B93119B-263B-4FED-AA89-198D26A3A3C4] 
     ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] 
    ) 
) ResultTable 
関連する問題