programing

SQL Server 2008 Management Studio에서 텍스트 또는 막대(MAX) 열의 전체 내용을 보려면 어떻게 합니까?

iphone6s 2023. 4. 27. 21:57
반응형

SQL Server 2008 Management Studio에서 텍스트 또는 막대(MAX) 열의 전체 내용을 보려면 어떻게 합니까?

2008 10 2008(빌드 10.0.1600)이 Events 이블, 포된이 .text 의 열Details(네, 저는 이것이 실제로 있어야 한다는 것을 알고 있습니다.varchar(MAX)컬럼, 하지만 이 데이터베이스를 설정한 사람은 그런 식으로 하지 않았습니다.)

이 열에는 SQL Server Management Studio를 통해 액세스하려는 매우 큰 예외 로그와 관련 JSON 데이터가 포함되어 있지만 그리드에서 텍스트 편집기로 결과를 복사할 때마다 43679자로 잘립니다.

를 설정할 수 Tools > Options > Query Results > SQL Server > Results To Grid다음과 같은 쿼리를 수행합니다.

select Convert(xml, Details) from Events
where EventID = 13920

데이터 열은 XML이 아닙니다. CONVERT 방법일 입니다. 가 "XML"에서하는 데 했습니다.text또는varchar(MAX)column에 표시됩니다.)

그러나 위의 옵션을 설정하고 쿼리를 실행한 후 결과에서 링크를 클릭해도 다음 오류가 발생합니다.

XML을 표시할 수 없습니다. 다음 오류가 발생했습니다.예기치 않은 파일 끝이 발생했습니다.5번 라인, 220160 위치

한 가지 해결책은 XML 데이터를 위해 서버에서 검색되는 문자 수를 늘리는 것입니다.이 설정을 변경하려면 도구 메뉴에서 옵션을 클릭합니다.

그럼,데이터에 접근하는 방법에 대한 아이디어가 있나요?열을 다음으로 변환하시겠습니까?varchar(MAX)내 고민을 해결해줄 수 있습니까?

SSMS는 XML 데이터에 대해 무제한 데이터만 허용합니다.이 값은 기본값이 아니므로 옵션에서 설정해야 합니다.

여기에 이미지 설명 입력

매우 제한적인 환경에서 작동할 수 있는 한 가지 방법은 아래와 같은 특별한 방법으로 열 이름을 지정하여 XML 데이터로 처리하는 것입니다.

DECLARE @S varchar(max) = 'A'

SET @S =  REPLICATE(@S,100000) + 'B' 

SELECT @S as [XML_F52E2B61-18A1-11d1-B105-00805F49916B]

SSMS(최소 버전 2012 ~ 현재 18.3)에서는 다음과 같이 결과가 표시됩니다.

여기에 이미지 설명 입력

클릭하면 XML 뷰어에서 전체 결과가 열립니다.오른쪽으로 스크롤하면 B의 마지막 문자가 보존되는 것을 알 수 있습니다.

그러나 이것은 몇 가지 중요한 문제를 가지고 있습니다.쿼리에 열을 추가하면 효과가 중단되고 모든 행이 첫 번째 행과 연결됩니다.에 " "와 같은 <XML 뷰어를 열지 못하고 구문 분석 오류가 발생했습니다.

Server 은 SQL Server 변환 문제를 방지하는 것입니다.<&lt;등 또는 이러한 캐릭터로 인한 실패는 아래와 같습니다(여기서는 Adam Machanic을 인정합니다).

DECLARE @S varchar(max)

SELECT @S = ''

SELECT @S = @S + '
' + OBJECT_DEFINITION(OBJECT_ID) FROM SYS.PROCEDURES

SELECT @S AS [processing-instruction(x)] FOR XML PATH('')

이 일을 할 수 있었어요

SELECT CAST('<![CDATA[' + LargeTextColumn + ']]>' AS XML) FROM TableName;

한 가지 해결 방법은 결과 집합을 마우스 오른쪽 단추로 클릭하고 "다른 이름으로 결과 저장..."을 선택하는 것입니다.그러면 열의 전체 내용이 포함된 CSV 파일로 내보냅니다.완벽하지는 않지만 나에게는 충분히 잘 작동했습니다.

해결 방법

이 간단한 해결책을 시도해 보셨습니까?두 번 클릭만 하면 됩니다!

쿼리 창에서

  1. 쿼리 옵션을 "그리드 결과"로 설정하고 쿼리를 실행합니다.
  2. 그리드 모서리의 결과 탭을 마우스 오른쪽 버튼으로 클릭하여 결과를 파일로 저장합니다.

파일에서 보고 싶은 모든 텍스트를 얻을 수 있습니다!!!바차(MAX) 필드의 결과에 대해 130,556자를 볼 수 있습니다.

파일로 생성되는 결과

가장 간단한 해결 방법은 테이블을 백업하고 스크립트를 보는 것입니다.작업 방법

  1. 데이터베이스를 마우스 오른쪽 단추로 클릭하고 선택합니다.Tasks>Generate Scripts...
  2. " 를 클릭합니다Next
  3. "개체 선택" 페이지
    1. 다음을 선택합니다.Select specific database objects테이블을 선택합니다.
    2. Next
  4. "스크립팅 옵션 설정" 페이지
    1. 출력 유형을 다음으로 설정합니다.Save scripts to a specific location
    2. 를 선택합니다.Save to file합니다.
    3. 다음을 클릭합니다.Advanced단추를 채우다
    4. General>Types of data to scriptData only또는Schema and Data확인을 클릭합니다.
    5. Next
  5. "요약 페이지" 다음 클릭
  6. SQL 스크립트는 4.2에서 설정한 옵션에 따라 생성되어야 합니다.이 파일을 열고 데이터를 봅니다.

TEXT 데이터 유형이 오래되어 더 이상 사용하면 안 됩니다. TEXT 열에서 데이터를 선택하는 것은 번거로운 일입니다.

ntext, 텍스트 및 이미지(Transact-SQL)

이후 버전의 Microsoft SQL Server에서는 ntext, text 및 이미지 데이터 유형이 제거될 예정입니다.새로운 개발 작업에서 이러한 데이터 유형을 사용하지 말고 현재 데이터 유형을 사용하는 응용 프로그램을 수정할 계획입니다.대신 nvarchar(max), varchar(max) 및 varbinary(max)를 사용합니다.

텍스트 데이터를 검색하려면 TEXTPR(Transact-SQL)사용해야 합니다.

텍스트 데이터 유형 처리에 대한 이 문서도 참조하십시오.

Xml 형식이 올바르지 않을 수 있습니다.이 경우 Xml로 캐스팅할 수 없으며 Management Studio에서 반환할 수 있는 텍스트의 양이 제한됩니다.그러나 텍스트를 다음과 같이 더 작은 덩어리로 분할할 수 있습니다.

With Tally As
    (
        Select ROW_NUMBER() OVER ( ORDER BY s1.object_id ) - 1 As Num
        From sys.sysobjects As s1
            Cross Join sys.sysobjects As s2
    )
Select Substring(T1.textCol, T2.Num * 8000 + 1, 8000)
From Table As T1
    Cross Join Tally As T2
Where T2.Num <= Ceiling(Len(T1.textCol) / 8000)
Order By T2.Num

그런 다음 수동으로 다시 결합해야 합니다.

편집

영화에 등장하는 인물들이 있는 것처럼 들립니다.textXml 파서가 좋아하지 않는 데이터입니다.이러한 값을 엔티티로 변환한 다음Convert(xml, data)속임수. 그래서 다음과 같은 것.

Update Table
Set Data = Replace(Cast(Data As varchar(max)),'<','&lt;')

(교체 기능이 작동하지 않기 때문에 varchar(max)에 캐스팅해야 했습니다.text당신이 그것들을 변환할 수 없는 이유가 있어서는 안 됩니다.text의 열.varchar(max).)

당신은 운이 없는 것 같아요.문제는 다른 모든 답변이 집중하는 것처럼 보이는 SQL 수준의 문제가 아니라 사용자 인터페이스 중 하나일 뿐입니다.Management Studio는 범용/범용 데이터 액세스 인터페이스가 아닙니다.인터페이스는 사용자의 인터페이스가 아니라 관리 영역이며, 지정된 사용 프로필 내에서 인터페이스를 사용하는 사용자는 이 문제에 직면하지 않기 때문에 이진 데이터와 대용량 테스트 데이터를 처리하는 데 심각한 제약이 있습니다.

큰 텍스트 데이터를 표시하는 것은 단순히 계획된 사용이 아닙니다.

선택할 수 있는 유일한 방법은 텍스트 입력을 가져다가 줄마다 줄을 잘라 Management Studio가 단일 행이 아닌 행 목록을 가져올 수 있도록 하는 테이블 값 함수입니다.

저는 SSMS에서 셀 단위로 열을 클릭할 수 있는 간단한 XML 해킹을 선호합니다.이 방법을 사용하면 SSMS의 표 형식 보기에서 데이터를 빠르게 확인하고 특정 셀을 클릭하여 원하는 경우 전체 값을 확인할 수 있습니다.이는 XML 오류를 방지한다는 점을 제외하고 OP의 기술과 동일합니다.

SELECT
     e.EventID
    ,CAST(REPLACE(REPLACE(e.Details, '&', '&amp;'), '<', '&lt;') AS XML) Details
FROM Events e
WHERE 1=1
AND e.EventID BETWEEN 13920 AND 13930
;

SSMS 18.2부터는 그리드 결과에서 최대 2백만 문자를 볼 수 있습니다.출처

더 많은 데이터를 표시하고(결과를 텍스트로) 셀에 저장할 수 있습니다(결과를 그리드로).SSMS는 이제 두 문자 모두에 대해 최대 2M자를 허용합니다.

아래 코드로 확인했습니다.

DECLARE @S varchar(max) = 'A'

SET @S =  REPLICATE(@S,2000000) + 'B' 

SELECT @S as a
declare @takeOver table(details nvarchar(max))
declare @json_auto nvarchar(max)

select @json_auto = (select distinct 
From table_1 cg
inner join table_2 c
on cg.column_1= c.column_1and cg.isDeleted =0 and c.isdeleted = 0
inner join table_3 d
on c.column_2= d.column_2 and d.isdeleted = 0
where cg.Id= 1017
for Json Auto)

insert into @takeOver
values(@json_auto)

select * from @takeOver

언급URL : https://stackoverflow.com/questions/2759721/how-do-i-view-the-full-content-of-a-text-or-varcharmax-column-in-sql-server-20

반응형