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

Каква е най-добрата практика за вмъкване на запис, ако той все още не съществува?

Когато трябва да гарантирате уникалността на записите при условие, което не може да бъде изразено чрез ограничение UNIQUE или PRIMARY KEY, наистина трябва да се уверите, че проверката за съществуване и вмъкване се извършват в една транзакция. Можете да постигнете това чрез:

  1. Използване на един SQL израз за извършване на проверката и вмъкването (вашата трета опция)
  2. Използване на транзакция с подходящо ниво на изолация

Има обаче четвърти начин, който ще ви помогне по-добре да структурирате кода си и също така да го накарате да работи в ситуации, в които трябва да обработвате партида записи наведнъж. Можете да създадете променлива TABLE или временна таблица, да вмъкнете всички записи, които трябва да бъдат вмъкнати там, и след това да напишете изразите INSERT, UPDATE и DELETE въз основа на тази променлива.

По-долу е (псевдо)код, демонстриращ този подход:

-- Logic to create the data to be inserted if necessary

DECLARE @toInsert TABLE (idCol INT PRIMARY KEY,dataCol VARCHAR(MAX))
INSERT INTO @toInsert (idCol,dataCol) VALUES (1,'row 1'),(2,'row 2'),(3,'row 3')

-- Logic to insert the data

INSERT INTO realTable (idCol,dataCol)
SELECT TI.*
FROM @toInsert TI
WHERE NOT EXISTS (SELECT 1 FROM realTable RT WHERE RT.dataCol=TI.dataCol)

В много ситуации използвам този подход, тъй като прави TSQL кода по-лесен за четене, възможен за преструктуриране и прилагане на модулни тестове.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свържете HP-UX Itanium към SQL Server

  2. Проверете колко пощенски артикули са в опашката в базата данни Mail в SQL Server (T-SQL)

  3. Как работи COUNT_BIG() в SQL Server

  4. datetime срещу datetimeoffset в SQL Server:Каква е разликата?

  5. Как да инсталирате SQL Server на Windows