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

Câu lệnh cập nhật đơn giản để tất cả các hàng được gán một giá trị khác

Trên một số bảng thử nghiệm, kế hoạch ban đầu của bạn trông như sau.

Nó chỉ tính toán kết quả một lần và lưu vào bộ nhớ cache trong một sppol sau đó phát lại kết quả đó. Bạn có thể thử cách sau để SQL Server thấy truy vấn con có tương quan và cần đánh giá lại cho từng hàng bên ngoài.

UPDATE table1
SET    table2Id = (SELECT TOP 1 table2Id
                   FROM   table2
                   ORDER  BY Newid(),
                             table1.table1Id)

Đối với tôi, kế hoạch này không có ống chỉ.

Điều quan trọng là phải tương quan trên một trường duy nhất từ ​​table1 tuy nhiên, để ngay cả khi một ống được thêm vào, nó phải luôn được bật lại thay vì cuộn lại (phát lại kết quả cuối cùng) vì giá trị tương quan sẽ khác nhau đối với mỗi hàng.

Nếu các bảng lớn, điều này sẽ chậm vì công việc yêu cầu là sản phẩm của hai hàng của bảng (cho mỗi hàng trong table1 nó cần quét toàn bộ table2 )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi giữa các kiểu dữ liệu ngày và giờ trong SQL Server (Ví dụ T-SQL)

  2. Cách chèn dấu ngắt dòng trong chuỗi VARCHAR / NVARCHAR của SQL Server

  3. Nhập / Xuất cơ sở dữ liệu với SQL Server Management Studio

  4. Cách lưu và truy xuất hình ảnh PictureBox vào Cơ sở dữ liệu máy chủ Sql Cột Varbinary (Tối đa) VB.NET

  5. Cách nhanh nhất để chèn hàng loạt dữ liệu vào SQL Server (máy khách C #)