web-dev-qa-db-ja.com

「文字列またはバイナリデータが切り捨てられる」の原因を確認する効率的な方法はありますか?

この質問 のフォローアップです。これは、Microsoftからの 機能リクエスト にも関連しています。

しかし、報告されてから何年も経ち、いくつかのメジャーリリースが市場に届きました。

質問:SQL Server 2017は、このエラーの根本的な原因を見つけやすくするためのメカニズムを提供していますか?それとも、問題が報告されたのは約9年前と同じくらい調査が難しいですか?

13
Alexei

変化はありません。 SQL Server 2017でも同じ漠然としたエラーメッセージが表示され、問題のある行/列を検出するメカニズムは提供されません。

Connectが廃止されたとき、このConnectアイテムは1,600票を超えていました。

Microsoftからの最新のコメントは次のとおりです。

最新のアップデート-それに取り組んでいる開発者は、完全な修正の作成に伴う課題を理解しています。挿入や更新のパフォーマンスに影響を与えないような方法で、実際の変換関数まで完全なエラーメッセージを生成するために必要な列に関する情報を組み込むのは難しいかもしれません。切り捨てられるデータのタイプと長さのロギングなど、短期的には安価なものを実装する可能性があります。そのような修正が一般に公開されたリリースにいつ到達するかを知るにはまだ時期尚早です。

私が提案できる最善の方法は、その項目に投票することです(そして、それについてコメントし、これがあなたにもたらすビジネス価値を説明します)。

20
Aaron Bertrand

私たちの祈りは次のように答えられました このMDSNブログ投稿で示される

SQL Server 2019では、コンテキスト情報が追加された新しいメッセージが導入されています。

エラーは今やもっと意味のあるものになるはずです:

メッセージ2628、レベル16、状態1、行14文字列またはバイナリデータは、テーブル 'DbName.SchemaName.TableName'、列 'Col'で切り捨てられます。切り捨てられた値: '...'。

また、この変更は2017年と2016年の両方にバックポートされる予定です。

この新しいメッセージは、SQL Server 2017 CU12(および今後のSQL Server 2016 SP2 CU)にもバックポートされますが、デフォルトではバックポートされません。セッションレベルまたはサーバーレベルで、メッセージID 8152を2628に置き換えるには、トレースフラグ460を有効にする必要があります。

3
Alexei