Dalam database SQL Server 2008 (build 10.0.1600) langsung ini, ada Events
tabel, yang berisi text
kolom bernama Details
. (Ya, saya menyadari ini seharusnya 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, ia memotongnya menjadi 43679 karakter.
Saya telah membaca di berbagai lokasi di Internet bahwa Anda dapat mengatur Karakter Maksimum yang Diperoleh untuk Data XML 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 dalam kolom sama sekali bukan XML. CONVERT
Membuat kolom ke XML hanyalah solusi yang saya temukan dari Googling bahwa orang lain telah digunakan untuk mengatasi batas yang dimiliki SSMS dari mengambil data dari kolom text
atau varchar(MAX)
.)
Namun, setelah mengatur opsi di atas, menjalankan kueri, dan mengklik tautan di hasilnya, saya masih mendapatkan kesalahan berikut:
Tidak dapat menampilkan XML. Galat berikut terjadi: Akhir berkas tak terduga telah terjadi. Baris 5, posisi 220160.
Salah satu solusinya adalah dengan meningkatkan jumlah karakter yang diambil dari server untuk data XML. Untuk mengubah pengaturan ini, pada menu Alat, klik Opsi.
Jadi, ada ide tentang cara mengakses data ini? Akankah mengubah kolom untuk varchar(MAX)
memperbaiki kesengsaraan saya?
sumber
CDATA
mungkin berhasil, tetapi jika data Anda menyertakan karakter kontrol, Anda harus melakukan operasi penggantian. Dalam kasus saya, saya menggunakan Pemisah Unit, ASCII Code 31, dalam data saya. Karena saya hanya menggunakan satu karakter itu di banyak tempat, yang sederhana sudahREPLACE(details, char(31), '&x1f;')
cukup. Jika saya memiliki karakter yang tidak diketahui atau sejumlah besar karakter berbeda untuk diganti, saya mungkin harus mencari solusi lain.CDATA
itu adalah saran pertama saya. Yang terakhirAS [processing-instruction(x)]
menghindari itu.Saya bisa membuat ini bekerja ...
SELECT CAST('<![CDATA[' + LargeTextColumn + ']]>' AS XML) FROM TableName;
sumber
Salah satu solusinya adalah dengan mengklik kanan pada kumpulan hasil dan pilih "Simpan Hasil Sebagai ...". Ini mengekspornya ke file CSV dengan seluruh konten kolom. Tidak sempurna tetapi bekerja cukup baik untuk saya.
sumber
Apakah Anda mencoba solusi sederhana ini? Hanya 2 klik saja!
Di jendela kueri,
Anda akan mendapatkan semua teks yang ingin Anda lihat di file !!! Saya dapat melihat 130.556 karakter untuk hasil saya dari bidang varchar (MAX)
sumber
Solusi paling sederhana yang saya temukan adalah mencadangkan tabel dan melihat skrip. Untuk melakukan ini
Tasks
>Generate Scripts...
Next
Select specific database objects
dan pilih tabel Anda.Next
Save scripts to a specific location
Save to file
dan isi opsi terkaitAdvanced
tombol tersebutGeneral
>Types of data to script
keData only
atauSchema and Data
dan klik okNext
sumber
Tipe data TEXT sudah tua dan tidak boleh digunakan lagi, sangat merepotkan untuk memilih data dari kolom TEXT.
ntext, teks, dan gambar (Transact-SQL)
Anda perlu menggunakan TEXTPTR (Transact-SQL) untuk mengambil data teks.
Juga lihat artikel ini tentang Menangani Tipe Data Teks .
sumber
varchar(MAX)
mencegah SSMS memotong data darinya?Sepertinya Xml tidak terbentuk dengan baik. Jika demikian, Anda tidak akan dapat mentransmisikannya sebagai Xml dan karena itu, Anda dibatasi dalam jumlah teks yang dapat dikembalikan di Management Studio. Namun, Anda dapat 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 lagi secara manual.
EDIT
Sepertinya ada beberapa karakter dalam
text
data yang tidak disukai parser Xml. Anda dapat mencoba mengubah nilai-nilai tersebut menjadi entitas dan kemudian mencobaConvert(xml, data)
triknya. Jadi sesuatu seperti:Update Table Set Data = Replace(Cast(Data As varchar(max)),'<','<')
(Saya perlu melakukan cast ke varchar (max) karena fungsi replace tidak akan berfungsi pada
text
kolom. Seharusnya tidak ada alasan Anda tidak dapat mengubahtext
kolom tersebut menjadivarchar(max)
.)sumber
text
atauvarchar(MAX)
.TSQL
dari @IanQuigley berdasarkan jawaban ini bekerja dengan baik untuk saya. Saya pada dasarnya mengambil hasilnya (akhirnya menjadi 11 catatan) dan hanya menempelkannya bersama di Notepad. Bekerja dengan sempurna. Perlu menyimpan skrip ini. Saya memiliki beberapa XML sangat panjang yang menyertakan karakter tidak valid.Saya lebih suka peretasan XML sederhana ini yang membuat kolom dapat diklik di SSMS pada basis sel demi sel. Dengan metode ini, Anda dapat melihat data Anda dengan cepat di tampilan tabular SSMS dan mengklik sel tertentu untuk melihat nilai penuhnya jika menarik. Ini identik dengan teknik OP kecuali untuk menghindari kesalahan XML.
SELECT e.EventID ,CAST(REPLACE(REPLACE(e.Details, '&', '&'), '<', '<') AS XML) Details FROM Events e WHERE 1=1 AND e.EventID BETWEEN 13920 AND 13930 ;
sumber
NVARCHAR
/VARCHAR
. Misalnya, karakter NUL (berbeda dariNULL
sebagai nilai untuk bidang). Pemeran akan gagal untuk string dengan nilai yang disematkan seperti itu.Mulai dari SSMS 18.2, Anda sekarang dapat melihat hingga 2 juta karakter dalam hasil kisi. Sumber
Saya memverifikasi ini dengan kode di bawah ini.
DECLARE @S varchar(max) = 'A' SET @S = REPLICATE(@S,2000000) + 'B' SELECT @S as a
sumber
Anda kurang beruntung, saya pikir. Masalahnya bukanlah masalah level SQL karena semua jawaban lain tampaknya fokus, tetapi hanya salah satu antarmuka pengguna. Studio Manajemen tidak dimaksudkan sebagai antarmuka akses data untuk tujuan umum / umum. Tidak ada antarmuka Anda, tetapi area administratif Anda, dan memiliki batasan serius dalam menangani data biner dan data uji yang besar - karena orang yang menggunakannya dalam profil penggunaan yang ditentukan tidak akan mengalami masalah ini.
Menyajikan data teks besar bukanlah penggunaan yang direncanakan.
Satu-satunya pilihan Anda adalah fungsi nilai tabel yang mengambil input teks dan memotongnya baris untuk setiap baris, sehingga Management Studio mendapatkan daftar baris, bukan satu baris.
sumber