Получение текущей SESSION ID и TRANSACTION ID в MSSQL
Чтобы получить SESSION ID:
select @@spid
Чотбы получить TRANSACTION ID:
select CURRENT_TRANSACTION_ID()
Чтобы получить SESSION ID:
select @@spid
Чотбы получить TRANSACTION ID:
select CURRENT_TRANSACTION_ID()
"OFFSET FETCH" это фильтр который позволяет пропустить некоторое количество первых строк в выборке.
Например:
select field1, field2, field3
from table1
order by field1, field2
offset 100 rows fetch next 50 rows only;
Этот пример вернет строки с 101 по 150, из всех строк отсортированных по field1 и field2.
! Сначала будет произведена сортировка, затем возврат 50 строк.
! Для больших объемов данных этот способ требует много ресурсов, поэтому использовать лучше на минимизированных выборках.
Два способа выполнения транзакций в MSSQL, с отменой по ошибке.
Первый способ:
BEGIN TRY
BEGIN TRAN
UPDATE 1
UPDATE 2 --Error
UPDATE 3
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH
Пример поиска процедуры по тексту который она содержит
SELECT name
FROM sys.procedures
WHERE Object_definition(object_id) LIKE '%некоторый_текст%'
Этот скрипт вернет названия всех процедур которые содержат в текст: "некоторый_текст"
Пример выбора диапазона дат:
WITH q AS
(
SELECT 1 AS num
UNION ALL
SELECT num + 1
FROM q
WHERE num < 10
)
SELECT DATEADD(DAY,0,cast(cast(DATEADD(DAY,-num,SYSDATETIME()) as date) as datetime))
FROM q
Пример обновления данных в одной таблице с одновременным сопоставлением и проверкой условия по второй таблице при помощи JOIN:
update cc
set cc.ActivateState=2
from ClientsCards cc
left join ClientsCardsHeads cch
on cch.CardUid=cc.Uid
where cc.ActivateState=0 and cch.State=3
ClientsCards cc - Первая таблица в которой производится изменение.
ClientsCardsHeads cch - Вторая таблица с данными которой производится сверка.
Данный пример может быть полезен, когда надо выбрать некоторое количество пронумерованных записей из неоткуда допустим во временную таблицу или табличную переменную.
Пример:
select number as Section from master..spt_values where type='L' and number>0 and number<=100
Пример выводит 100 строк таблицы с значениями от 1 до 100 и единственным столбцом Section.
Добавление записей в таблицу игнорируя IDENTITY:
-- Включаем
SET IDENTITY_INSERT tableA ON
-- Необходимо задать полный список солей для INSERT:
INSERT Into tableA ([id], [c2], [c3], [c4], [c5] )
SELECT [id], [c2], [c3], [c4], [c5] FROM tableB
-- Вариант "INSERT Into tableA SELECT ........" работать не будет
-- Выключаем
SET IDENTITY_INSERT tableA OFF