Pertanyaan Bagaimana cara melihat konten lengkap dari kolom teks atau varchar (MAX) di SQL Server 2008 Management Studio?


Dalam database SQL Server 2008 (build 10.0.1600) langsung ini, ada sebuah Events tabel, yang berisi text kolom bernama Details. (Ya, saya menyadari ini seharusnya benar-benar menjadi varchar(MAX) kolom, tetapi siapa pun yang mengatur database ini tidak melakukannya dengan cara itu.)

Kolom ini berisi log pengecualian yang sangat besar dan data JSON terkait yang saya coba akses melalui SQL Server Management Studio, tetapi setiap kali saya menyalin hasil dari grid ke editor teks, itu memotongnya di 43679 karakter.

Saya telah membaca di berbagai lokasi di Internet yang Anda dapat mengatur Karakter Maksimum Anda Diperoleh untuk XML Data di Tools > Options > Query Results > SQL Server > Results To Grid ke Tidak Terbatas, lalu melakukan kueri seperti ini:

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

(Perhatikan bahwa data adalah kolom bukan XML sama sekali. CONVERTing kolom ke XML hanyalah sebuah solusi yang saya temukan dari Googling yang orang lain telah gunakan untuk melewati batas yang dimiliki SSMS dari mengambil data dari text atau varchar(MAX) kolom.)

Namun, setelah menyetel opsi di atas, menjalankan kueri, dan mengeklik tautan di hasil, saya masih mendapatkan kesalahan berikut:

Tidak dapat menampilkan XML. Kesalahan berikut terjadi:   Akhir file yang tidak terduga telah terjadi. Baris 5, posisi 220160.

Salah satu solusinya adalah dengan menambah jumlah karakter yang diambil dari server untuk data XML. Untuk mengubah pengaturan ini, pada menu Alat, klik Opsi.

Begitu, ada gagasan tentang cara mengakses data ini? Akan mengonversi kolom menjadi varchar(MAX) memperbaiki kesengsaraan saya?


75
2018-05-03 16:58


asal


Jawaban:


Salah satu trik yang mungkin bekerja dalam keadaan yang sangat terbatas hanyalah menamai kolom dengan cara khusus seperti di bawah ini.

DECLARE @S varchar(max) = 'A'

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

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

Dalam SSMS 2012 dan 2014 ini menampilkan hasil seperti di bawah ini

enter image description here

Mengkliknya akan membuka hasil lengkap dalam penampil XML. Bergulir ke kanan menunjukkan karakter terakhir B dipertahankan,

Namun ini memang memiliki beberapa masalah yang signifikan. Menambahkan kolom ekstra ke kueri memecah efek dan baris ekstra semua menjadi digabungkan dengan yang pertama. Akhirnya jika string berisi karakter seperti < membuka penampil XML gagal dengan kesalahan penguraian.

Cara yang lebih kuat untuk melakukan ini yang menghindari masalah konversi SQL Server < untuk &lt; dll atau gagal karena karakter-karakter ini di bawah ini (kredit Adam Machanic di sini).

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('')

76
2018-05-03 17:47



Saya bisa membuat ini berfungsi ...

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

29
2018-04-01 17:20



Satu pekerjaan adalah klik kanan pada hasil set dan pilih "Save Results As ...". Ini mengekspornya ke file CSV dengan seluruh isi kolom. Tidak sempurna tetapi bekerja cukup baik untuk saya.

Workaround


10
2018-03-08 19:45



Apakah Anda mencoba solusi sederhana ini? Hanya 2 klik saja!

Di jendela kueri,

  1. setel opsi kueri ke "Hasil ke Kotak", jalankan kueri Anda
  2. Klik kanan pada tab hasil di sudut kisi, simpan hasil sebagai file apa saja

Anda akan mendapatkan semua teks yang ingin Anda lihat di file !!! Saya dapat melihat 130.556 karakter untuk hasil saya bidang varchar (MAX)

Results in a file


5
2017-12-05 22:39



Solusi yang paling sederhana yang saya temukan adalah mencadangkan tabel dan melihat skripnya. Untuk melakukan ini

  1. Klik kanan database Anda dan pilih Tasks > Generate Scripts...
  2. "Pengantar" klik halaman Next
  3. Halaman "Pilih Objek"
    1. Memilih Select specific database objects dan pilih meja Anda.
    2. Klik Next
  4. "Set Opsi Scripting" halaman
    1. Setel jenis output ke Save scripts to a specific location
    2. Memilih Save to file dan isi opsi terkait
    3. Klik Advanced tombol
    4. Set General > Types of data to script untuk Data only atau Schema and Data dan klik ok
    5. Klik Next
  5. "Halaman Ringkasan" klik berikutnya
  6. Script sql Anda harus dibuat berdasarkan opsi yang Anda tetapkan di 4.2. Buka file ini dan lihat data Anda.

4
2018-03-13 14:46



Tipe data TEXT sudah tua dan tidak boleh digunakan lagi, itu adalah rasa sakit untuk memilih data dari kolom TEXT.

ntext, teks, dan gambar (Transact-SQL) 

nteks, teks, dan tipe data gambar   akan dihapus dalam versi mendatang   Microsoft SQL Server. Hindari pemakaian   tipe data ini dalam pengembangan baru   bekerja, dan berencana untuk memodifikasi aplikasi   yang saat ini menggunakannya. Menggunakan   nvarchar (maks), varchar (maks), dan   varbinary (maks) sebagai gantinya.

Anda perlu menggunakan TEXTPTR (Transact-SQL) untuk mengambil data teks.

Lihat juga artikel ini di Penanganan Jenis Data Teks.


2
2018-05-03 17:21



Kedengarannya seperti Xml mungkin tidak terbentuk dengan baik. Jika itu kasusnya, maka Anda tidak akan dapat mentransmisikannya sebagai Xml dan mengingat itu, Anda terbatas pada berapa banyak teks yang dapat Anda kembalikan di Management Studio. Namun, Anda bisa memecah teks menjadi bagian yang lebih kecil seperti:

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

Anda kemudian perlu menggabungkannya secara manual lagi.

EDIT

Sepertinya ada beberapa karakter dalam text data yang parser Xml tidak suka. Anda dapat mencoba mengonversi nilai tersebut menjadi entitas dan kemudian coba Convert(xml, data) menipu. Jadi sesuatu seperti:

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

(Saya perlu melakukan cast ke varchar (maks) karena fungsi penggantian tidak akan berfungsi text kolom. Seharusnya tidak ada alasan Anda tidak bisa mengubahnya text kolom ke varchar(max).)


2
2018-05-03 17:20