Пример выборки диапазона дат в MSSQL

MS SQL - по необходимости

Пример выборки диапазона дат:

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

Читаль далее...

MSSQL Date select

MSSQL - Как правильно отловить и вернуть ошибку в запросе

MS SQL - по необходимости

Пример, как правильно отлавливать ошибку в MSSQL

BEGIN TRY  
    -- Некий код который может вызвать ошибку.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT  
        ERROR_NUMBER() AS ErrorNumber  
        ,ERROR_SEVERITY() AS ErrorSeverity  
        ,ERROR_STATE() AS ErrorState  
        ,ERROR_PROCEDURE() AS ErrorProcedure  
        ,ERROR_LINE() AS ErrorLine  
        ,ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO


Оп!

Комментировать...

MSSQL TSQL SQL

MSSQL - Выбор процедур из метаданных по содержимому (пример)

MS SQL - по необходимости

Пример вывода всех процедур которые содержат текст «ChequeHeads» (проще говоря в которых есть обращения к данной таблице):

SELECT name
FROM   sys.procedures
WHERE  Object_definition(object_id) LIKE '%ChequeHeads%'

Комментировать...

MSSQL Метаданные SQL

MSSQL SEQUENCE - Пример создания сиквенса ( последовательности ) и его использования

MS SQL - по необходимости

Пример создания сиквенса (последовательности) в MSSQL:

CREATE SEQUENCE [dbo].[CardNum] 
 AS [bigint]
 START WITH 1
 INCREMENT BY 1
 MINVALUE -9223372036854775808
 MAXVALUE 9223372036854775807
 CACHE 
GO

После выполнения данного запроса в базе данных будет создан сиквенс CardNum типа BIGINT, который будет начинаться с 1.

Теперь чтобы получить новое значение сиквенса:
set @card_num =  NEXT VALUE FOR [dbo].[CardNum];


Чтобы просто посмотреть все текущие свойства сиквенса:
SELECT * FROM sys.sequences WHERE name = 'CardNum' ;


Вот и всё.

Комментировать...

MSSQL SEQUENCE SQL

MSSQL - передача таблицы или списка значений в процедуру ( C# .NET )

MS SQL - по необходимости

Часто бывает необходимость передать за один раз некоторый набор данных в процедуру, в этой публикации будет приведен пример как это сделать на языке C# для базы данных MSSQL.

Использовать будем обычный способ вызова процедуры без каких либо фреймворков.

Для начала создадим тестовую таблицу в базе данных:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Bottles](
	[Uid] [uniqueidentifier] NOT NULL,
	[Name] [varchar](50) NULL,
	[Color] [varchar](50) NULL
) ON [PRIMARY]
GO
В данной таблице будем размещать бутылки разных названий и цветов (просто для теста).

Читаль далее...

MSSQL Procedure Table TSQL SQL

Правильное выполнение транзакции в MSSQL

MS SQL - по необходимости

Два варианта выполнения транзакции в MSSQL, для которых при возникновении ошибки транзакция отменяется.

Первый вариант:

BEGIN TRY
    BEGIN TRAN
    UPDATE 1
    UPDATE 2 --Ошибка
    UPDATE 3
    COMMIT TRAN
END TRY
BEGIN CATCH
    ROLLBACK TRAN
END CATCH


Второй вариант:
SET XACT_ABORT ON
BEGIN TRAN
UPDATE 1
UPDATE 2 --Ошибка
UPDATE 3
COMMIT TRAN


Оба варианта сделают одно и то-же при возникновении ошибки на втором шаге, отменят всю транзакцию включая первый шаг.

Комментировать...

MSSQL Transaction TSQL

MSSQL - Try Catch Transaction (Отменяем транзакцию с ошибкой корректно)

MS SQL - по необходимости

Ниже приведен пример корректного отмена транзакции при ошибке:

update Params set Value=168 where Param = 'SessionHoursLimit'

PRINT @@TRANCOUNT  
	BEGIN TRY
    BEGIN TRAN  
        PRINT @@TRANCOUNT  
		update Params set Value=167 where Param = 'SessionHoursLimit'
		select 1/0 -- Если закомментировать эту строку то предыдущая строка выполнится
    COMMIT  TRAN 
	END TRY
	BEGIN CATCH
		if @@TRANCOUNT>0
		ROLLBACK TRAN
	END CATCH
PRINT @@TRANCOUNT  

select * from Params


Если закомментировать строку с ошибочным оператором SELECT 1/0 то предшествующая строка будет выполнена и транзакция успешно завершится, если оставить строку SELECT 1/0 то транзакция отменится полностью, и параметр Value останется таким, каким он был установлен в первой строке скрипта до начала транзакции.

Комментировать...

MSSQL Transaction Try Catch TSQL SQL

MSSQL - Выбор N пронумерованных виртуальных записей записей при помощи системной таблицы SPT_VALUES

MS SQL - по необходимости

Данный пример может быть полезен, когда надо выбрать некоторое количество пронумерованных записей из неоткуда допустим во временную таблицу или табличную переменную.

Пример:

select number as Section from master..spt_values where type='L' and number>0 and number<=100


Пример выводит 100 строк таблицы с значениями от 1 до 100 и единственным столбцом Section.

Комментировать...

SPT_VALUES MSSQL TSQL

MSSQL Оконные функции - Пример ROWNUMBER OVER PARTITION BY

MS SQL - по необходимости

Оконные функции — это такие функции которые на основе окна (набора записей) вычисляют скалярное (одиночное) значение. Это значение определяется с помощью инструкции OVER.

Пример:

select regioncode, aolevel, offname,
 row_number() over(partition by regioncode order by aolevel, offname) as rownum
 from s_adr_fias
order by regioncode, aolevel, offname;


В данном примере будет сделана выборка в которой для каждого regioncode в поле rownum будет нумерация отсортированных значений aolevel, offname.

Комментировать...

MSSQL TSQL Оконные функции partition by sql

OFFSET FETCH пример применения в TSQL

MS SQL - по необходимости

Фильтр OFFSET FETCH в языке TSQL интересен тем что в отличии от фильтра TOP позволяет пропускать заданное количество строк ROWS.

Пример:

select regioncode, aolevel, offname from s_adr_fias
order by regioncode, aolevel, offname
offset 100 rows fetch next 50 rows only;


Данный пример демонстрирует выборку из набора отсортированного по условию ORDER BY (по полям regioncode, aolevel, offname) 50 строк данных пропустив первые 100 строк.

!!! Сначала выполняется именно сортировка, и только затем, из отсортированного набора данных берётся необходимый диапазон.

P.S. На больших объёмах, даже с учетом самой оптимальной индексации, данный фильтр является довольно ресурсоемким.

Комментировать...

MSSQL TSQL OFFSET FETCH SELECT Базы данных

Работа со строками в Oracle (PL/SQL)

Основные способы обработки строковых значений в Oracle. В этой публикации я приведу основные функции (читать далее...)

965  
Работа с Postgresql в C#

Не так давно занялся разработкой приложения на C# работающего на базе PostreSQL, появилась информаци (читать далее...)

781  
Поиск и регулярные выражения в MySQL

СУБД MySQL имеет различные инструменты для осуществления поиска, среди которых оператор LIKE, осущес (читать далее...)

610  
Установка русской кодировки на уже созданную базу данных (смена COLLATION)

Полезный пример изменения кодировки (COLLATION) на уже созданной базе данных. В данном примере устан (читать далее...)

555  
Работа с XML в Oracle PL/SQL (Часть 1)

В этой публикации я приведу основные способы работы с XML в Oracle, которые сам использую. Здесь буд (читать далее...)

526  
Курсоры в MSSQL - перебор выборки в цикле.

Команды манипулирования данными SELECT, UPDATE, DELETE работают сразу с группами строк. Эти группы, (читать далее...)

461  
Функция Oracle TO_DATE (PL/SQL)

Функция TO_DATE — преобразует строку в переменную времени DATE. Синтаксис: TO_DATE(исходная_строка, (читать далее...)

438  
OpenXML - Пример создания Excel файла на C#

В данной публикации приведен пример генерации Excel файла при помощи библиотеки OpenXML. Отличие это (читать далее...)

395  
Работа с MySQL в C#

Надеюсь данная публикация не даст читателям повторить мои ошибки и поможет сделать изначально правил (читать далее...)

386  
Объединение выборок UNION, INTERSECT, MINUS в Oracle (PL/SQL)

В Oracle присутствует возможность объединять выборки. Для объединения используются операторы: UNION (читать далее...)

381