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

Cách nâng cấp (cập nhật hoặc chèn) trong SQL Server 2005

Cố gắng kiểm tra sự tồn tại:

IF NOT EXISTS (SELECT * FROM dbo.Employee WHERE ID = @SomeID)

    INSERT INTO dbo.Employee(Col1, ..., ColN)
    VALUES(Val1, .., ValN)

ELSE

    UPDATE dbo.Employee
    SET Col1 = Val1, Col2 = Val2, ...., ColN = ValN
    WHERE ID = @SomeID

Bạn có thể dễ dàng gói nó thành một thủ tục được lưu trữ và chỉ cần gọi thủ tục được lưu trữ đó từ bên ngoài (ví dụ:từ ngôn ngữ lập trình như C # hoặc bất cứ thứ gì bạn đang sử dụng).

Cập nhật: hoặc bạn chỉ có thể viết toàn bộ câu lệnh này trong một chuỗi dài (có thể làm được - nhưng không thực sự hữu ích lắm) - hoặc bạn có thể gói nó thành một thủ tục được lưu trữ:

CREATE PROCEDURE dbo.InsertOrUpdateEmployee
       @ID INT,
       @Name VARCHAR(50),
       @ItemName VARCHAR(50),  
       @ItemCatName VARCHAR(50),
       @ItemQty DECIMAL(15,2)
AS BEGIN
    IF NOT EXISTS (SELECT * FROM dbo.Table1 WHERE ID = @ID)
       INSERT INTO dbo.Table1(ID, Name, ItemName, ItemCatName, ItemQty)
       VALUES(@ID, @Name, @ItemName, @ItemCatName, @ItemQty)
    ELSE
       UPDATE dbo.Table1
       SET Name = @Name,
           ItemName = @ItemName,
           ItemCatName = @ItemCatName,
           ItemQty = @ItemQty
       WHERE ID = @ID
END

và sau đó chỉ cần gọi thủ tục được lưu trữ đó từ mã ADO.NET của bạn



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vô hiệu hoá Tài khoản SA trong SQL Server (Ví dụ T-SQL)

  2. Phiên bản có tên SQL Server với dự án Visual Studio 2017 Installer

  3. Làm thế nào chúng ta có thể sử dụng ISNULL cho tất cả các tên cột trong SQL Server 2008?

  4. Gói SSIS không muốn tìm nạp siêu dữ liệu của bảng tạm thời

  5. 3 cách để nhận các bước công việc của công việc đại lý máy chủ SQL (T-SQL)