問題は、50 の固定長に到達するためにbinary(50)
パディング0x00
され、通常は文字列ターミネータとして扱われることです。
と同じ動作が見られます
SELECT N'The quick brown ' + NCHAR(0) + N' fox jumped over the lazy dog.'
データは実際にはREPLACE
. 切り捨てが発生するのは、文字列として表示しようとするときです。
DECLARE @VBIN BINARY(50)
DECLARE @PASS NVARCHAR(3)
DECLARE @TEXT NVARCHAR(MAX)
SET @TEXT = '123456123789'
SET @PASS = '123'
SET @VBIN = CONVERT(BINARY, N'321')
SELECT REPLACE(@TEXT, @PASS, CONVERT(NVARCHAR(MAX), @VBIN))
SELECT DATALENGTH(REPLACE(@TEXT, @PASS, CONVERT(NVARCHAR(MAX), @VBIN))) /*112*/
SELECT CAST(REPLACE(@TEXT, @PASS, CONVERT(NVARCHAR(MAX), @VBIN)) AS VARBINARY(112))
varbinary
問題を回避するのではなく使用binary
しますが、とにかくここで実際に何をしようとしているのかわかりません。