「NVARCHAR(MAX) の切り捨てが依然として発生する: 暗黙的な変換について」
最新の SQL Server バージョンでは NVARCHAR(MAX) が使用されるという誤解にもかかわらず大量のデータを保持しているため、ユーザーは次のように 4000 文字に切り捨てられる可能性がありますインスタンス:
DECLARE @Query NVARCHAR(max); SET @Query = 'SELECT...' -- some of the query gets set here SET @Query = @Query + '...' -- more query gets added on, etc. -- later on... PRINT LEN(@Query) -- Prints out 4273, which is correct as far as I can tell PRINT @Query -- Truncates value to 4000 characters EXEC sp_executesql @Query -- totally crashes due to malformed (truncated) query
根本原因: 暗黙的な変換
この問題は暗黙的な変換に起因します。文字列を Unicode 文字と連結する場合、SQL Server は警告や切り捨ての兆候を表示せずに、結果を NVARCHAR(4000) に自動的に変換します。この問題は、結果を格納するために宣言された変数が NVARCHAR(MAX) である場合でも発生します。
解決策: 明示的な変換を強制する
暗黙的な変換を防止し、大きなデータの保持を確保するにはデータは常に CAST を使用して事前連結します:
SET @Query = CAST('' as nVarChar(MAX)) -- Force implicit conversion to nVarChar(MAX) + 'SELECT...' -- some of the query gets set here + '...' -- more query gets added on, etc.
空の文字列をキャストしてNVARCHAR(MAX) の場合、SQL Server は文字列全体を NVARCHAR(MAX) として処理するように明示的に指示されます。これにより、切り捨ての問題が解決されます。
その他の考慮事項
以上がSQL Server で NVARCHAR(MAX) によって文字列が切り捨てられるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。