Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 begin try на 2012 и 2008  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Попал на ошибку, может полезно будет кому.

На 2008R2 такое проходит, а на 2012 такое ошибку

BEGIN TRY
DISABLE TRIGGER ALL on dbo.table;
END TRY
...



исправляется так

BEGIN TRY; -- <-----
DISABLE TRIGGER ALL on dbo.table;
END TRY
...
19 авг 13, 17:27    [14727011]     Ответить | Цитировать Сообщить модератору
 Re: begin try на 2012 и 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Winnipuh,

Да вроде нет никакой ошибки:
USE tempdb;
GO
CREATE TABLE dbo.tst_trigger(id INT)
GO
CREATE TRIGGER tst_trigger_ai ON dbo.tst_trigger AFTER INSERT
AS PRINT 1;
GO
-- нет точки с запятой
BEGIN TRY
  DISABLE TRIGGER ALL on dbo.tst_trigger;
END TRY
BEGIN CATCH
  PRINT ERROR_MESSAGE();
END CATCH;
GO
DROP TABLE dbo.tst_trigger;
GO

Command(s) completed successfully.

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
	Oct 19 2012 13:38:57 
	Copyright (c) Microsoft Corporation
	Enterprise Evaluation Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
19 авг 13, 17:40    [14727070]     Ответить | Цитировать Сообщить модератору
 Re: begin try на 2012 и 2008  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
а на 2008?
20 авг 13, 14:20    [14730940]     Ответить | Цитировать Сообщить модератору
 Re: begin try на 2012 и 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
А на 2008 R2 выдаёт ошибку.

Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'DISABLE'.

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (X64) 
	Jun 11 2012 16:41:53 
	Copyright (c) Microsoft Corporation
	Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Забавно, да.

А у вас наоборот, что ли? Или просто описка в первом посте?
20 авг 13, 14:40    [14731057]     Ответить | Цитировать Сообщить модератору
 Re: begin try на 2012 и 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
И на 2005 эффект повторяется. Ставлю точку с запятой — нет ошибки, убираю — есть ошибка.

Microsoft SQL Server 2005 - 9.00.5057.00 (X64) 
	Mar 25 2011 13:33:31 
	Copyright (c) 1988-2005 Microsoft Corporation
	Developer Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)
20 авг 13, 14:42    [14731073]     Ответить | Цитировать Сообщить модератору
 Re: begin try на 2012 и 2008  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Гость333
А на 2008 R2 выдаёт ошибку.

Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'DISABLE'.

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (X64) 
	Jun 11 2012 16:41:53 
	Copyright (c) Microsoft Corporation
	Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Забавно, да.

А у вас наоборот, что ли? Или просто описка в первом посте?


да, ошибся, наоборот
20 авг 13, 15:02    [14731226]     Ответить | Цитировать Сообщить модератору
 Re: begin try на 2012 и 2008  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Не обязательно BEGIN TRY. Все еще забавнее:
select 1
disable trigger all on dbo.SomeTable;
go

print 1
disable trigger all on dbo.SomeTable;
И на 2008 R2, и на 2012 выдает
Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'trigger'.
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'disable'.
Т.е. без ";" DISABLE не рассматривается как ключевое слово. Кстати, и студии честно выделяют ошибки синтаксиса.
20 авг 13, 15:46    [14731492]     Ответить | Цитировать Сообщить модератору
 Re: begin try на 2012 и 2008  [new]
o-o
Guest
invm
Т.е. без ";" DISABLE не рассматривается как ключевое слово. Кстати, и студии честно выделяют ошибки синтаксиса.


...и приз уходит invm:

Posted by Microsoft on 1/3/2008 at 12:18 PM
[...]currently "DISABLE" is not a keyword, and this is the reason why we require the previous statment to be ended with semicolon.
In order to fix this we would have to make "DISABLE" a keyword which might break users who have table, columns, functions etc. named "disable".
We'll look more closely at this and see if we can fix it without breaking users.

MSFT-MSO: DISABLE TRIGGER statement not compiling within a SP, however it executes just fine outside
22 авг 13, 11:16    [14740172]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить