Я хочу сообщить об ошибке и обходном пути в SQL Server 2017. Microsoft предложила открыть сообщение здесь, так что ... Проблема связана с конкатенацией строк в сочетании с CAST и REPLACE.Что-то, что встречается в моем коде довольно часто.Запустите этот запрос:
USE master;
PRINT @@Version
DECLARE @l NVARCHAR(MAX) = '';
SELECT @l += CAST(s.object_id AS NVARCHAR(50)) + ' ' + REPLACE(s.name, 'x', 'y') + ', '
FROM sys.tables s
ORDER BY s.name;
PRINT '> ' + @l;
SET @l = '';
SELECT @l = @l + CAST(s.object_id AS NVARCHAR(50)) + ' ' + REPLACE(s.name, 'x', 'y') + ', '
FROM sys.tables s
ORDER BY s.name;
PRINT '> ' + @l;
На моих серверах вывод:
Microsoft SQL Server 2017 (RTM-CU6) (KB4101464) - 14.0.3025.34 (X64)
Apr 9 2018 18:00:41
Copyright (C) 2017 Microsoft Corporation
Web Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)
> 1787153412 MSreplication_options, 117575457 spt_fallback_db, 133575514 spt_fallback_dev, 149575571 spt_fallback_usg, 1483152329 spt_monitor,
> 1483152329 spt_monitor,
Так что использование @l + = работает, @l = @l + - нет.Когда вы опускаете CAST или REPLACE, результаты совпадают.