Вопросы 61-70 для разработчиков
Ответ: Оператор EXCEPT используется для возврата строк из результирующего набора первого запроса, которые отсутствуют в результирующем наборе второго запроса. Эффективно выполняет разность множеств, показывая только данные, уникальные для первого запроса.
SELECT column_list FROM Table1
EXCEPT
SELECT column_list FROM Table2;
SELECT ProductID FROM ProductsSold
EXCEPT
SELECT ProductID FROM ProductsReturned;
Ответ: Constraints обеспечивают правила, которые должны соблюдаться данными, предотвращая невалидные или несогласованные данные:
Автоматически применяя эти правила, constraints поддерживают надёжность и консистентность данных в БД.
-- Local Temporary Table
CREATE TABLE #LocalTemp (ID INT);
-- Global Temporary Table
CREATE TABLE ##GlobalTemp (ID INT);
Ответ: MERGE statement объединяет множественные операции INSERT, UPDATE и DELETE в одну. Используется для синхронизации двух таблиц:
MERGE INTO TargetTable T
USING SourceTable S
ON T.ID = S.ID
WHEN MATCHED THEN
UPDATE SET T.Value = S.Value
WHEN NOT MATCHED THEN
INSERT (ID, Value) VALUES (S.ID, S.Value);
SELECT Column1, MAX(Column2)
FROM TableName
GROUP BY Column1;
WITH CTE AS (
SELECT
Column1,
Column2,
ROW_NUMBER() OVER (
PARTITION BY Column1
ORDER BY Column2
) AS RowNum
FROM TableName
)
SELECT *
FROM CTE
WHERE RowNum = 1;
Ответ: ACID гарантирует что транзакции БД надежны и поддерживают целостность данных.
Ответ: Уровни изоляции контролируют как транзакции взаимодействуют и поддерживают консистентность данных.
Ответ: Подсказка WITH (NOLOCK) позволяет запросу читать данные без получения общих блокировок, эффективно читая невыполненные данные.
SELECT *
FROM Orders WITH (NOLOCK);
Ответ: Deadlock возникает когда две или более транзакции ждут друг друга, чтобы освободить ресурсы.
DECLARE @retry_count INT = 0;
DECLARE @max_retries INT = 3;
WHILE @retry_count < @max_retries
BEGIN
BEGIN TRY
BEGIN TRANSACTION;
-- SQL операции
COMMIT TRANSACTION;
BREAK;
END TRY
BEGIN CATCH
IF ERROR_NUMBER() = 1205 -- Deadlock error
BEGIN
SET @retry_count = @retry_count + 1;
ROLLBACK TRANSACTION;
WAITFOR DELAY '00:00:00.100'; -- Подождать перед повтором
END
ELSE
BEGIN
THROW;
END
END CATCH
END
Ответ: Database Snapshot — это read-only копия БД на определённый момент времени.
CREATE DATABASE MySnapshot ON
(
NAME = MyDatabase_Data,
FILENAME = 'C:\Snapshots\MyDatabase_Data.ss'
)
AS SNAPSHOT OF MyDatabase;