Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Точка с запятой в хранимых процедурах / 16 сообщений из 16, страница 1 из 1
21.01.2021, 16:16
    #40037715
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
Всем привет! Подскажите пожалуйста как измениться поведение хранимой процедуры (или транзакции) при наличии или отсутствии точки запятой в конце каждого оператора.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE PROCEDURE test_proc
AS
BEGIN

	SET NOCOUNT ON;
  
	update table set
	 field1 = 1
  where field2 = 0; -- что измениться если убрать точку с запятой

	update table set
	 field1 = 2
  where field2 = 1; -- что измениться если убрать точку с запятой

END



Если я руками не начинаю транзакцию "begin tran", то транзакция запускается неявно. При наличии точек с запятой для каждого update запуститься своя неявная транзакция, а при отсутствии точек с запятой запустится одна общая неявная транзакция на два update?

Microsoft SQL Server 2017 (RTM-CU22)
...
Рейтинг: 0 / 0
21.01.2021, 16:38
    #40037718
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
...
Рейтинг: 0 / 0
21.01.2021, 16:43
    #40037719
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
Сон Веры Павловны,

Так я и сам могу. Есть ли у кого-нибудь точно понимание как это работает?
...
Рейтинг: 0 / 0
21.01.2021, 16:52
    #40037723
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
Mandarin
а при отсутствии точек с запятой запустится одна общая неявная транзакция на два update?


Разве? Вообще-то некоторые инструкции уже требуют явного указания ";".
И когда-то давно MS рекомендовало ставить везде этот разделитель.
...
Рейтинг: 0 / 0
21.01.2021, 17:15
    #40037729
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
Mandarin
При наличии точек с запятой для каждого update запуститься своя неявная транзакция, а при отсутствии точек с запятой запустится одна общая неявная транзакция на два update?

никакие точки с запятой не открывают и не закрывают никакие транзакции.
2 апдэйта при отсутствии явной транзакции (begin tran + commit/rollback)
всегда приведут к двум независимым транзакциям,
хоть вы там наставите/уберете точки с запятой, комментарии, пробелы, табуляции...

ответ Соммарскога по приведенной ссылке совсем не об этом.
у него такой экстремистский пример, когда при отсутствии точки с запятой перед throw
в конструкции
Код: sql
1.
2.
IF @@trancount > 0 ROLLBACK TRANSACTION
   THROW



приведет к тому, что парсер прочтет это дело как ROLLBACK TRANSACTION THROW,
где THROW - имя транзакции
...
Рейтинг: 0 / 0
21.01.2021, 17:51
    #40037737
архивариус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
Mandarin
Всем привет! Подскажите пожалуйста как измениться поведение хранимой процедуры (или транзакции) при наличии или отсутствии точки запятой в конце каждого оператора.

SQL Server 2005’s Books Online says:

Many code examples use a semicolon (;) as a Transact-SQL statement terminator. Although the semicolon is not required, using it is considered a good practice .

You know, like flossing your teeth, and puff-puff-give. But SQL Server 2008 marked a change:

Although the semicolon is not required for most statements in this version of SQL Server, it will be required in a future version.
...
Рейтинг: 0 / 0
21.01.2021, 18:18
    #40037741
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
Mandarin
Есть ли у кого-нибудь точно понимание как это работает?

По ссылке прямо в самом начале выдачи исчерпывающее описание.
...
Рейтинг: 0 / 0
21.01.2021, 18:43
    #40037742
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
Mandarin,

отсутствие точки с запятой или написание может привести к синтаксической ошибке при компиляции процедуры. Других последствий не имеет. Рекомендовано всегда заканчивать выражения точкой с запятой.
...
Рейтинг: 0 / 0
21.01.2021, 19:25
    #40037752
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
Как-то раз столкнулся с необходимостью использования ";". Не помню подробностей.
...
Рейтинг: 0 / 0
21.01.2021, 19:40
    #40037754
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
L_argo
Как-то раз столкнулся с необходимостью использования ";". Не помню подробностей.
Перед with и после merge.
...
Рейтинг: 0 / 0
22.01.2021, 08:49
    #40037822
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
Гавриленко Сергей Алексеевич
L_argo
Как-то раз столкнулся с необходимостью использования ";". Не помню подробностей.
Перед with и после merge.
а почему, нет объяснений?
...
Рейтинг: 0 / 0
22.01.2021, 09:02
    #40037824
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
andreymx
Гавриленко Сергей Алексеевич
пропущено...
Перед with и после merge.
а почему, нет объяснений?

with - ключевое слово, которое, помимо CTE, используется как минимум в хинтах. ; перед with показывает парсеру, что это именно CTE. И да, в DDL TVF c CTE точка с запятой не нужна - более того, она приводит к синтаксической ошибке (что тоже вполне объяснимо).
...
Рейтинг: 0 / 0
22.01.2021, 09:19
    #40037827
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
мне с этой точки зрения оракл больше нравится
в конце каждого оператора точка с запятой
каждая процедура бегинится и ендится

тут более жестко, зато прозрачно

но это имхо
...
Рейтинг: 0 / 0
22.01.2021, 09:27
    #40037834
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
andreymx
мне с этой точки зрения оракл больше нравится
в конце каждого оператора точка с запятой
каждая процедура бегинится и ендится

тут более жестко, зато прозрачно

но это имхо

Ну я просто по сишной привычке всегда ставлю ; везде, где её можно поставить. Мне так потом исходники читать проще.
...
Рейтинг: 0 / 0
22.01.2021, 09:27
    #40037836
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
andreymx
Гавриленко Сергей Алексеевич
пропущено...
Перед with и после merge.
а почему, нет объяснений?


После merge, видимо, чтобы гарантировать, что операторы insert/update/delete относятся к merge.
...
Рейтинг: 0 / 0
22.01.2021, 13:03
    #40037958
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точка с запятой в хранимых процедурах
При использовании ; программа не требует форматирования. В некоторых ситуациях это позволяет вводить последовательность команд в одну строку.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Точка с запятой в хранимых процедурах / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]