Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо получавам тези различни резултати от две SQL заявки?

За съжаление, това е ненадежден метод за конкатенация на низове в SQL Server. Бих го избягвал във всички случаи, освен в най-тривиалните. Има малко повече информация в тази KB:Планът за изпълнение и резултатите от обобщените конкатенационни заявки зависят от Местоположение на израз .

Въпреки това успях както да дублирам вашия проблем, така и да осигуря заобиколно решение в моята среда:

SET @val = ''
SELECT @val = @val + 'Hello, my name is ' + replace([name], '', '') + '!' + CHAR(10) + CHAR(13)
FROM LINKED.A.sys.tables

Забележете, че добавих празна функция за замяна към израза. Въпреки че не трябва да прави нищо на изхода, той добавя локален стъпка "изчисляване на скалар" към плана на заявката. Това изглежда изтегля обратно всички данни от колоната с име, за да бъдат обработени локално, вместо просто да остави отдалечената заявка да върне това, което смята, че е необходимо.

Не съм сигурен дали има по-добра функция за използване освен replace с празни аргументи. Може би двойно reverse или нещо. Просто не забравяйте да прехвърлите към максимален тип данни, ако е необходимо, както се посочва в документацията.

АКТУАЛИЗАЦИЯ

Просто деклариране на @var като varchar(max) вместо nvarchar(max) изчиства проблема, тъй като след това връща цялата колона с име (напишете sysname -- или nvarchar(128) -- вярвам) за локална обработка, точно както направи функцията за замяна. Не мога да се преструвам, че знам коя комбинация от настройки на свързания сървър и имплицитното кастинг причинява това да се появи. Надяваме се, че някой с повече познания в тази област може да се включи!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да извлека този конкретен подниз в SQL Server?

  2. Групово вмъкване на SQL Server – част 2

  3. Pivots с динамични колони в SQL Server

  4. Конкатна стойност на полето към низ в SQL Server

  5. Поведение на плана за заявка за темпорална таблица на SQL Server 2016