No, non è registrato da nessuna parte. Vai a votare e indica il tuo caso aziendale; questo è un lungo elenco di cose che dovrebbero essere riparate in SQL Server.
Ciò è stato richiesto anni fa su Connect (probabilmente prima in SQL Server 2000 o 2005), quindi di nuovo sul nuovo sistema di feedback:
E ora è stato consegnato, in SQL Server 2019 , SQL Server 2017 CU12 e apparirà in una futura CU di SQL Server 2016 SP2.
Nel primo CTP pubblico di SQL Server 2019, emerge solo sotto il flag di traccia 460. Sembra un po 'segreto, ma è stato pubblicato in questo white paper di Microsoft . Questo sarà il comportamento predefinito (non è richiesto alcun flag di traccia) in futuro, anche se sarai in grado di controllarlo tramite una nuova configurazione con ambito database VERBOSE_TRUNCATION_WARNINGS
.
Ecco un esempio:
USE tempdb;
GO
CREATE TABLE dbo.x(a char(1));
INSERT dbo.x(a) VALUES('foo');
GO
Risultato in tutte le versioni supportate precedenti a SQL Server 2019:
Messaggio 8152, livello 16, stato 30, riga 5
Dati stringa o binari verrebbero troncati.
La dichiarazione è stata chiusa.
Ora, nei CTP di SQL Server 2019, con il flag di traccia abilitato:
DBCC TRACEON(460);
GO
INSERT dbo.x(a) VALUES('foo');
GO
DROP TABLE dbo.x;
DBCC TRACEOFF(460);
Il risultato mostra la tabella, la colonna e il valore ( troncato , non pieno ):
Messaggio 2628, livello 16, stato 1, riga 11
Dati stringa o binari verrebbero troncati nella tabella "tempdb.dbo.x", colonna "a". Valore troncato: 'f'.
La dichiarazione è stata chiusa.
Fino a quando non puoi rilasciare tutto e aggiornare a SQL Server 2019 o passare al database SQL di Azure, puoi modificare il codice "automagic" per estrarre effettivamente la max_length sys.columns
, insieme al nome da cui devi arrivare comunque, quindi applicare LEFT(column, max_length)
o qualunque sia l'equivalente di PG. Oppure, dal momento che ciò significa solo che perderai silenziosamente i dati, vai a capire quali colonne non corrispondono e correggi le colonne di destinazione in modo che si adattino a tutti i dati dall'origine. Dato l'accesso ai metadati a entrambi i sistemi e il fatto che stai già scrivendo una query che deve corrispondere automagicamente alle colonne di origine -> destinazione (altrimenti questo errore difficilmente sarebbe il tuo problema più grande), non dovresti fare alcuna forza bruta indovinando affatto.
sys.columns
perché non avevo assolutamente idea di quale codice stai attualmente utilizzando per "automagicamente" generare le tue query. Non c'è davvero troppo complesso che potrei immaginare di incorporare nel tuo codice diSELECT name, object_id, max_length FROM sys.columns;
. Dal momento che hai già un codice automagico che deve fare questo - o qualcosa di molto simile - non pensavo fosse necessario un esempio.