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

SQL Server 2005 triển khai MySQL REPLACE INTO?

Đây là điều khiến tôi khó chịu về MSSQL ( không bật blog của tôi ). Tôi ước MSSQL được hỗ trợ upsert .

Mã của @ Dillie-O là một cách hay trong các phiên bản SQL cũ hơn (+1 phiếu bầu), nhưng về cơ bản nó vẫn là hai hoạt động IO (exists và sau đó là update hoặc insert )

Có một cách tốt hơn một chút về bài đăng này , về cơ bản:

--try an update
update tablename 
set field1 = 'new value',
    field2 = 'different value',
    ...
where idfield = 7

--insert if failed
if @@rowcount = 0 and @@error = 0
    insert into tablename 
           ( idfield, field1, field2, ... )
    values ( 7, 'value one', 'another value', ... )

Điều này làm giảm nó thành một hoạt động IO nếu đó là một bản cập nhật hoặc hai nếu một phần chèn.

MS Sql2008 giới thiệu merge từ tiêu chuẩn SQL:2003:

merge tablename as target
using (values ('new value', 'different value'))
    as source (field1, field2)
    on target.idfield = 7
when matched then
    update
    set field1 = source.field1,
        field2 = source.field2,
        ...
when not matched then
    insert ( idfield, field1, field2, ... )
    values ( 7,  source.field1, source.field2, ... )

Bây giờ nó thực sự chỉ là một hoạt động IO, nhưng mã khủng khiếp :-(



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm kiếm mảng SQL

  2. Cách sao chép bảng trong MySQL

  3. Lưu truy vấn mysql vào tệp excel từ trang web php

  4. Cách chọn dữ liệu từ hai bảng bằng một truy vấn duy nhất

  5. Nhận kết quả từ mysql dựa trên kinh độ vĩ độ