Özel sıkıştırmayı gerçekleştirmenin potansiyel olarak iki yolu vardır:
SQL Server 2016'dan başlayarak COMPRESS ve DECOMPRESS için yerleşik işlevler vardır . Bu işlevler GZip algoritmasını kullanır.
Seçtiğiniz herhangi bir algoritmayı uygulamak için SQLCLR kullanın (yanıtında @Remus belirtildiği gibi). Bu seçenek, SQL Server 2016'dan önceki sürümlerde kullanılabilir ve SQL Server 2005'e kadar uzanır.
O .NET içinde mevcuttur çünkü GZip kolay bir seçimdir ve desteklenen .NET Framework kütüphaneleri (kod olabilir de SAFE
Meclis). Veya, GZip istiyorsanız ancak kodlama / dağıtma ile uğraşmak istemiyorsanız , SQL # SQLCLR kütüphanesinin Ücretsiz sürümünde bulunan Util_GZip ve Util_GUnzip işlevlerini kullanabilirsiniz (yazarı olduğum).
İster kendiniz kodlayın ister SQL # kullanın, GZip kullanmaya karar verirseniz, GZip sıkıştırmasını yapmak için .NET'te kullanılan algoritmanın Framework sürüm 4.5'te daha iyisi için değiştiğini unutmayın (MSDN'deki "Açıklamalar" bölümüne bakın. ( GZipStream Class ) için tıklayın. Bu şu anlama gelir:
- SQL Server 2005, 2008 veya 2008 R2 kullanıyorsanız (tümü Framework sürüm 2.0, 3.0 ve 3.5'i işleyen CLR v 2.0'a bağlı) kullanıyorsanız, Framework sürüm 4.5'te yapılan değişikliğin hiçbir etkisi yoktur ve maalesef .NET'in orijinal, iğrenç algoritması.
- SQL Server 2012 veya daha yenisini (şimdiye kadar 2014 ve 2016) kullanıyorsanız - hepsi 4.0, 4.5.x, 4.6 Framework sürümlerini işleyen CLR v 4.0'a bağlı - o zaman daha yeni, daha iyi algoritmayı kullanabilirsiniz. Tek gereksinim, .NET Server'ı SQL Server çalıştıran sunucudaki sürüm 4.5 veya daha yeni bir sürümle güncelleştirmenizdir.
Ancak, GZip kullanmak zorunda değilsiniz ve benzeri herhangi bir algoritmayı uygulamakta özgürsünüz.
LÜTFEN DİKKAT: yukarıda belirtilen tüm yöntemler teknik olarak "NVARCHAR (MAX)" verilerini sıkıştırmanın alternatif yolları olsa da, gerçek yerine koymak yerine daha çok "çözüm" dir. Aradaki fark, SQL Server tarafından sunulan yerleşik Veri Sıkıştırma ile row
ve page
sıkıştırma, sahne arkasında işleniyor ve verilerin hala kullanılabilir, okunabilir ve dizine eklenebilir olmasıdır. Ancak herhangi bir veriyi VARBINARY
yerden tasarruf etmek, ancak bazı işlevlerden vazgeçmek anlamına gelir. Doğru, 20k dize zaten dizine eklenemez, ancak yine de birWHERE
yan tümcesi veya herhangi bir dize işlevi ile. Sıkıştırılmış özel bir değere sahip herhangi bir şey yapmak için, onu anında açmanız gerekir. İkili dosyaları (PDF, JPEG, vb.) Sıkıştırırken bu bir sorun değildir, ancak bu soru NVARCHAR
verilere özgüdür .