Hayır, hiçbir yere giriş yapılmadı. Oy verin ve iş durumunuzu belirtin; bu, SQL Server'da düzeltilmesi gereken uzun listede bir tanesidir.
Bu, yıllar önce Connect'te (muhtemelen önce SQL Server 2000 veya 2005 zaman diliminde), sonra da yeni geribildirim sisteminde talep edildi:
Ve şimdi, SQL Server 2019'da , SQL Server 2017 CU12'de teslim edildi ve gelecekteki bir SQL Server 2016 SP2 CU'da görünecektir.
SQL Server 2019 ilk kamu CTP olarak, sadece izleme bayrağı 460. tür gizli Bu sesler altında yüzeyleri, ancak yayımlandı içerik broşürü bu Microsoft . Bu ileriye dönük varsayılan davranış olacaktır (izleme bayrağı gerekli değildir), ancak bunu yeni bir veritabanı kapsamlı yapılandırma ile kontrol edebileceksiniz VERBOSE_TRUNCATION_WARNINGS
.
İşte bir örnek:
USE tempdb;
GO
CREATE TABLE dbo.x(a char(1));
INSERT dbo.x(a) VALUES('foo');
GO
SQL Server 2019'dan önceki tüm desteklenen sürümlerde sonuç:
Mesaj 8152, Seviye 16, Durum 30, Satır 5
Dize veya ikili veriler kesilecektir.
Açıklama sonlandırıldı.
Şimdi, SQL Server 2019 CTP'lerinde izleme bayrağı etkin durumda:
DBCC TRACEON(460);
GO
INSERT dbo.x(a) VALUES('foo');
GO
DROP TABLE dbo.x;
DBCC TRACEOFF(460);
Sonuç tablo, sütun ve ( kesilmiş , dolu değil ) değerini gösterir:
Mesaj 2628, Seviye 16, Durum 1, Satır 11
Dize veya ikili veriler, 'tempdb.dbo.x', 'a' sütunu tablosunda kesilecektir. Kesilmiş değer: 'f'.
Açıklama sonlandırıldı.
Her şeyi bırakıp SQL Server 2019 veya Azure SQL Veritabanı hareket yükseltebilirsiniz kadar aslında dan MAX_LENGTH çekmeye, size "automagic" kodunu değiştirebilir sys.columns
yine orada almak ve sonra uygulanması gereken ismiyle birlikte LEFT(column, max_length)
veya PG'nin karşılığı her ne ise. Veya, bu yalnızca sessizce veri kaybedeceğiniz anlamına geldiğinden, hangi sütunların uyuşmadığını bulun ve hedef sütunları kaynaktaki tüm verilere uyacak şekilde düzeltin. Her iki sisteme de meta veri erişimi ve zaten kaynak -> hedef sütunlarıyla otomatik olarak eşleşmesi gereken bir sorgu yazdığınız gerçeği göz önüne alındığında (aksi halde bu hata en büyük probleminiz olmaz), kaba kuvvet uygulamamalısınız hiç tahmin etmiyorum.
sys.columns
çünkü sorgularınızı "otomatik olarak" oluşturmak için hangi kodu kullandığınızı kesinlikle bilmiyordum. Gerçekten de, kodunuza dahil etmekle ilgili tahmin edebileceğimden çok daha karmaşık değilSELECT name, object_id, max_length FROM sys.columns;
. Zaten bunu yapmak zorunda olan otomatik bir kodunuz olduğundan - ya da buna benzer bir şey - bir örneğin gerekli olduğunu düşünmedim.