いいえ、どこにも記録されません。投票に行き、ビジネスケースを述べてください。これは、SQL Serverで修正する必要のある長いリストの1つです。
これは何年も前にConnectで(おそらく最初にSQL Server 2000または2005の時間枠で)要求され、次に新しいフィードバックシステムで要求されました。
そして現在、SQL Server 2019、SQL Server 2017 CU12で提供されており、将来のSQL Server 2016 SP2 CUに登場します。
SQL Server 2019の最初の公開CTPでは、トレースフラグ460の下でのみ表示されます。これはちょっとした秘密に聞こえますが、このマイクロソフトホワイトペーパーで公開されました。これは今後のデフォルトの動作(トレースフラグは不要)になりますが、新しいデータベーススコープの構成を介してこれを制御できますVERBOSE_TRUNCATION_WARNINGS
。
以下に例を示します。
USE tempdb;
GO
CREATE TABLE dbo.x(a char(1));
INSERT dbo.x(a) VALUES('foo');
GO
SQL Server 2019より前のすべてのサポートされているバージョンの結果:
メッセージ8152、レベル16、状態30、行5
文字列またはバイナリデータは切り捨てられます。
ステートメントは終了されました。
次に、トレースフラグを有効にしたSQL Server 2019 CTPで:
DBCC TRACEON(460);
GO
INSERT dbo.x(a) VALUES('foo');
GO
DROP TABLE dbo.x;
DBCC TRACEOFF(460);
結果には、テーブル、列、および(切り捨てられ、完全ではない)値が表示されます。
メッセージ2628、レベル16、状態1、行11
文字列またはバイナリデータは、テーブル 'tempdb.dbo.x'、列 'a'で切り捨てられます。切り捨てられた値: 'f'。
ステートメントは終了されました。
あなたはすべてをドロップすると、SQL Serverの2019、またはAzureのSQLデータベースへの移行にアップグレードすることができるまで、実際のMAX_LENGTHを引っ張って、あなたの「オートマジック」のコードを変更することができsys.columns
ますが、とにかくそこに取得し、その後、適用されなければならない名前と一緒に、LEFT(column, max_length)
またはPGに相当するものは何でも。または、それは単にデータを静かに失うことを意味するので、どの列が一致していないかを調べ、ソースからのすべてのデータに適合するように宛先列を修正します。両方のシステムへのメタデータアクセス、およびソース->宛先列に自動的に一致する必要があるクエリを既に作成しているという事実(そうでない場合、このエラーはほとんど問題になりません)を考慮すると、ブルートフォースを行う必要はありませんまったく推測。
sys.columns
クエリを「自動的に」生成するために現在使用しているコードがまったくわからなかったため、コード参照を入れませんでした。本当にあなたのコードに組み込むことについて私が推測できるほど複雑ではありませんSELECT name, object_id, max_length FROM sys.columns;
。これを実行する必要のあるオートマジックコードが既にあるため、または非常に似たものがあるので、例が必要だとは思いませんでした。