Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tại sao tôi nhận được những kết quả khác nhau này từ hai truy vấn SQL?

Thật không may, đây là một phương pháp nối chuỗi không đáng tin cậy trong SQL Server. Tôi sẽ tránh nó trong tất cả, trừ những trường hợp nhỏ nhặt nhất. Có một số thông tin khác trong KB này: Kế hoạch Thực thi và Kết quả của Truy vấn Kết hợp Tổng hợp Phụ thuộc vào Khi Vị trí biểu thức .

Điều đó nói rằng, tôi có thể vừa sao chép vấn đề của bạn vừa đưa ra giải pháp khắc phục trong môi trường của tôi:

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

Lưu ý rằng tôi đã thêm một hàm thay thế rỗng vào biểu thức. Mặc dù nó không phải làm gì với đầu ra, nó sẽ thêm một cục bộ bước "tính toán vô hướng" cho kế hoạch truy vấn. Điều này dường như kéo lại tất cả dữ liệu từ cột tên để sau đó được xử lý cục bộ thay vì chỉ để truy vấn từ xa trả về những gì nó cho là cần thiết.

Tôi không chắc liệu có chức năng nào tốt hơn để sử dụng ngoài thay thế với các đối số trống. Có lẽ đảo ngược kép hoặc một cái gì đó. Chỉ cần đảm bảo truyền tới một kiểu dữ liệu tối đa nếu cần thiết như tài liệu đã nêu.

CẬP NHẬT

Chỉ cần khai báo @var dưới dạng varchar (max) chứ không phải là nvarchar (max) giải quyết vấn đề, vì nó sau đó trả lại toàn bộ cột tên (gõ sysname - hoặc nvarchar (128) - Tôi tin rằng) để xử lý cục bộ giống như hàm thay thế đã làm. Tôi không thể giả vờ biết sự kết hợp nào của cài đặt máy chủ được liên kết và ép kiểu ngầm gây ra điều này. Hy vọng rằng ai đó có nhiều kiến ​​thức hơn trong lĩnh vực này có thể tham gia!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại bỏ và tạo lại cơ sở dữ liệu trong Microsoft SQL Server

  2. Khắc phục sự cố cơ sở dữ liệu SQL trong sự cố nâng cấp

  3. T-SQL:Xóa tất cả các hàng trùng lặp nhưng giữ lại một hàng

  4. Sắp xếp chữ và số

  5. TSQL PIVOT NHIỀU CỘT