2016-10-12 20 views
1

私は、700列以上の1000列のテーブルをいくつか持っています。SQL ServerのVARCHAR(MAX)より大きい値

今、私は私がPIVOT/UNPIVOTを使用して、いくつかのNULL値があるならば、彼らはNULLに変換され、空の文字列になっことが文句を言わないときのでISNULL(col1,0)形式にこのテーブルからすべての列を表示したいです。だから私はこれらのNULL0に置き換えようとしています。

この例では、sysobjectsテーブルを使用して、あなたのssmsで試すことができます。 VARCHAR(MAX)でもNVARCHAR(MAX)でも不十分です。ここで少数の行ではなくすべての行を取得するにはどうすればよいですか?

DECLARE @colsUnpivot VARCHAR(MAX) 

SET @colsUnPivot = STUFF((
         SELECT ',' + 'ISNULL(' + QUOTENAME(name) + ', 0) AS ' 
            + QUOTENAME(name) 
         FROM sysobjects t 
         FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'') 
PRINT @colsUnPivot 

set @query = 'SELECT id,code_name,lkp_value 
FROM 
(
SELECT unitid,institution,city,state,zip, '+ @colsUnpivot+' 
    FROM sysobjects) AS cp 
    UNPIVOT (lkp_value for code_name IN ('[email protected]+') 
) AS up' 
--PRINT @Query 
--PRINT @Query1 
    exec(@query) 

私は上記のコードの意味は、意味がありませんが、私は私がここにsysobjectsを使用する必要がありますように私が持っている同じものを生産することはできません。

しかし、上記のコードはエラー投げている:

Msg 102, Level 15, State 1, Line 6
Incorrect syntax near '('.

をそしてそこにそう多くのデータがあり、それが切り捨てられているためです。ここで

は、だから私はまだその切り捨てを考える

,ISNULL([opd_ 

、私のPRINTが言うことです。

+0

はSSMSによって切り捨てあなた出力されますが、他のいくつかの問題に直面して?より詳細な情報を提供できますか?私はそれが劣悪な状態であることを非常に疑う。 – ajeh

+1

'PRINT'と' SELECT'は大きな結果の*表示*を切り捨てますが、依然として完全な値を選択することができます。あなたはSSMSでそれを見ることができません。 – Siyual

+1

彼らが言ったのは。 varchar(max)は最大2GBのデータになります。私はあなたがそこに行っていることを見ることができません。 – SMM

答えて

2

問題は、PRINTコマンドがSSMSに表示するデータを切り捨てることです。

あなただけ切り捨てずSSMS内のデータを参照する必要がある場合、私は、XMLとしてそれを残してSELECTをやってお勧めします:

DECLARE @colsUnpivot xml 

    SET @colsUnPivot = (SELECT ',' + 'ISNULL(' + QUOTENAME(name) + ', 0) AS ' 
            + QUOTENAME(name) 
         FROM sysobjects t 
         FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') 

    SELECT @colsUnPivot 

SSMSを、異なるXML出力を扱い、データを切り捨てるためのより高い閾値を持っています。

1

SQLではprintの代わりにSELECTを使用します。

SELECT @colsUnPivot 

また、これらの値はグリッドに結果に大変疲れていることを確認してください: Results to Grid Options

関連する問題