Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Для определения и уничтожение курсора рекомендуется пользоваться макросами




Пример.

Правильно Не рекомендуется
__DECLARE_CURSOR__ MyCursor __DEALLOCATE_CURSOR__ MyCursor declare MyCursor insensitive cursor for deallocate #ifdef SYB_STYLE cursor #endif MyCursor  
__DEALLOCATE_CURSOR__ MyCursor __DEALLOCATE_CURSOR__ MyCursor

 

Оператор CREATE PROC

Параметры, создаваемой процедуры должны располагаться с новой строки, с отступом в 2 символа от имени процедуры, один под другим, с одной и той же колонки.

Пример.

Правильно
create proc Audit_Insert @Action DSTINYINT = NULL, @ObjectID DSIDENTIFIER = NULL, …
Неправильно
create proc Audit_Insert @Action DSTINYINT = NULL, @ObjectID DSIDENTIFIER = NULL, …

 

Оператор EXEC

Параметры, передаваемые вызываемым процедурам, должны располагаться с новой строки, с отступом в 2 символа от имени процедуры, один под другим, с одной и той же колонки.

Пример.

Правильно Неправильно
exec MyProc @ID = @ID out, @ObjectID = @ObjID   exec MyProc @ID out, @ObjectID exec MyProc @ID out, @ObjectID

В случае если вызов процедуры с указанными параметрами и отступами не превышает 80 символов, допускается написание вызова процедуры и списка параметров в одну строчку.

Пример.

Правильно Неправильно
exec MyProc @ID = @ID, @ObjectID = @ObjID exec MyProc @ID, @ObjectID  

Параметры хранимым процедурам необходимо передавать по имени, а не по номеру.

Пример.

Правильно Неправильно
exec MyProc @ID = @ID, @ObjectID = @ObjID   exec MyProc @ID, @ObjectID  

 

Оператор CASE

Формат:

1. Для сложных условий:

Case

when {условия отбора 1}

and {условия отбора 2}

then {код1}

when {условия отбора 3}

and {условия отбора 4}

then {код2}

else {код3}

End

 

2. Для простых условий, когда длина строки укладывается в 80 символов:

Case

when {условия отбора 1} then {код1}

when {условия отбора 2} then {код2}

else {код3}

End

При написании ключевые слова case и end выравниваются по левому краю в одной колонке, ключевое слово when - на следующей строке со сдвигом вправо на два пробела, ключевые слова then и операторы and, or, использующиеся при описании сложных условий, выравниваются по правому краю колонки. Рекомендуется then переносить на новую строку, т.к. условие может быть громоздким и код который написан после then не поместится на экран, прочитать такое условие будет сложно, тем более провести анализ.

 

Пример.

Правильно
case when b.timeType = 1 then case when b.time1 <> '19000101' and b.time2 = '19000101' then dateadd(yy,1,b.time1)   when b.time2 <> '19000101' and b.time1 = '19000101' then b.time2   when b.time1 <> '19000101' and b.time2 <> '19000101' then b.time2   else dateadd(yy,1,b.billDate) end   when b.timeType = 2 and b.PresDate = '19000101' then dateadd(yy,1,b.billDate)   else '19000101' end

 

Неправильно
case when b.timeType = 1 then case when b.time1 <> '19000101' and b.time2 = '19000101' then dateadd(yy,1,b.time1) when b.time2 <> '19000101' and b.time1 = '19000101' then b.time2 when b.time1 <> '19000101' and b.time2 <> '19000101' then b.time2 else dateadd(yy,1,b.billDate) end when b.timeType = and b.PresDate = '19000101' then dateadd(yy,1,b.billDate) when b.timeType = 2 and b.PresDate <>'19000101' then dateadd(dd,b.daysFrom,b.PresDate) when b.timeType = 3 then dateadd(dd,b.daysFrom,b.billDate) when b.timeType = 4 and b.time1 <> '19000101' then b.time1 else '19000101' end

 


 

Правила написания запроса при помощи left join и inner join

Формат:

Вариант 1 - без использования ключевого слова outer:

select {присваивание значений}

from {основная таблица}

left join {таблица2}

on {условие 1 на таблицу2}

and {условие 2 на таблицу2}

inner join {таблица3}

on {условие 1 на таблицу3}

Вариант 2 - c использованием ключевого слова outer:

select {присваивание значений}

from {основная таблица}

Left outer

join {таблица2}

on {условие 1 на таблицу2}

and {условие 2 на таблицу2}

inner join {таблица3}

on {условие 1 на таблицу3}

 

Рекомендуется вариант описания без ключевого слова outer.

4.3.10.2 При написании ключевые слова left [outer] join / inner join, on и операторы and, or использующиеся при описании сложных условий выравниваются по правому краю колонки.

Запрещено смешивать стандарты в одном запросе(или подзапросе) (ANSI, T-SQL). Если в запросе(или подзапросе) в секции from есть inner join или left join, то нельзя использовать в этой секции запятую, и выносить условия присоединения таблиц в where. Запросы должны быть в одном стандарте.

4.3.10.4 При использовании ANSI-стандарта нельзя использовать никакие другие варианты присоединения кроме left [outer] join и inner join, причем для последнего нельзя опускать слово inner. Отказ от outer join, right join и пр. обусловлен тем, что они делают код абсолютно нечитабельным, так как переопределяют порядок присоединения таблиц (мы получаем не тот порядок, в котором эти таблицы следуют друг за другом в секции from).

 

 

Пример 1.

Правильно
select a.Date, a.AccDeb, a.AccCre, a.QtyDeb, a.QtyCre, a.SwiftID from #Aviso a left join tSwift sw #M_NOLOCK_INDEX(XPKtSwift) on sw.SwiftID = a.SwiftID inner join tInstitution id #M_NOLOCK_INDEX(XPKtInstitution) on id.InstitutionID = a.InstOwnerDeb inner join tInstitution ic #M_NOLOCK_INDEX(XPKtInstitution) on ic.InstitutionID = a.InstOwnerCre left join tCountry cds #M_NOLOCK_INDEX(XPKtCountry) on cds.CountryID = id.CountryID left join tCountry cdg #M_NOLOCK_INDEX(XPKtCountry) on cdg.CountryID = id.InstGroupID left join tResource r #M_NOLOCK_INDEX(XPKtResource) on r.ResourceID = a.ResourcePsvID left join tPayInstruct p1 #M_NOLOCK_INDEX(XIE2tPayInstruct) on p1.DealTransactID = a.Reference andp1.Type = 2 and p1.Belong = 1  

 

Пример 2. Синтаксис с использованием outer

Правильно
select a.Date, a.AccDeb, a.AccCre, a.QtyDeb, a.QtyCre, a.SwiftID from #Aviso a left outer join tSwift sw #M_NOLOCK_INDEX(XPKtSwift) on sw.SwiftID = a.SwiftID inner join tInstitution id #M_NOLOCK_INDEX(XPKtInstitution) on id.InstitutionID = a.InstOwnerDeb inner join tInstitution ic #M_NOLOCK_INDEX(XPKtInstitution) on ic.InstitutionID = a.InstOwnerCre left outer join tCountry cds #M_NOLOCK_INDEX(XPKtCountry) on cds.CountryID = id.CountryID left outer join tCountry cdg #M_NOLOCK_INDEX(XPKtCountry) on cdg.CountryID = id.InstGroupID left outer join tResource r #M_NOLOCK_INDEX(XPKtResource) on r.ResourceID = a.ResourcePsvID left outer join tPayInstruct p1 #M_NOLOCK_INDEX(XIE2tPayInstruct) on p1.DealTransactID = a.Reference andp1.Type = 2 and p1.Belong = 1  

 

Неправильно
select a.Date, a.AccDeb, a.AccCre, a.QtyDeb, a.QtyCre, a.SwiftID from #Aviso a left outer join tSwift sw #M_NOLOCK_INDEX(XPKtSwift) on sw.SwiftID = a.SwiftID inner join tInstitution id #M_NOLOCK_INDEX(XPKtInstitution) on id.InstitutionID = a.InstOwnerDeb inner join tInstitution ic #M_NOLOCK_INDEX(XPKtInstitution) on ic.InstitutionID = a.InstOwnerCre left outer join tCountry cds #M_NOLOCK_INDEX(XPKtCountry) on cds.CountryID = id.CountryID left outer join tCountry cdg #M_NOLOCK_INDEX(XPKtCountry) on cdg.CountryID = id.InstGroupID left outer join tResource r #M_NOLOCK_INDEX(XPKtResource) on r.ResourceID = a.ResourcePsvID left outer join tPayInstruct p1 #M_NOLOCK_INDEX(XIE2tPayInstruct) on p1.DealTransactID = a.Reference andp1.Type = 2and p1.Belong = 1  

 

Управление транзакциями

Синтаксис языка Transact SQL включает в себя несколько операторов управляющих транзакциями. Это операторы: begin transaction, end transaction и т.д.. На данную структуру существуют ограничения и требования к написанию с точки зрения стандартов. Все данные требования и ограничения сформированы исходя из принципов легкой последующей читаемости исходных текстов, а также принципов целостности производимых операций.





Поделиться с друзьями:


Дата добавления: 2016-11-02; Мы поможем в написании ваших работ!; просмотров: 501 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Что разум человека может постигнуть и во что он может поверить, того он способен достичь © Наполеон Хилл
==> читать все изречения...

2945 - | 2783 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.