Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
в таблицу фактов добавил вычисляемое поле, которое считается по другому (строковому) полю этой таблицы. И еще индекс на это вычисляемое поле.
Вычисляемое поле пытается перевести номер накладной из строкового вида в числовой, т.е. там такая формула:
case when (isnumeric([DocNo]) = 1) then (convert(int,[DocNo])) else 0 end


Есть процедура, обрабатывающая эту т.фактов (удаление старых записей за период, добавление новых), и джоб, который запускает эту процедуру по расписанию.
После добавления этого вычисляемого поля джоб стал вываливаться с ошибкой:
"DELETE failed because the following SET options have incorrect settings: 'ARITHABORT'"

Вычитал на форуме, что СУБД требует включения этой опции в случае наличия вычисляемых полей и индексов по ним. В процедуру в редакторе EnterpriseManager'а прописал опцию "SET ARITHABORT ON". Не помогло (при выполнении из джоба вываливается все с той же ошибкой).
Вычитал на форуме, что сервер запоминает опции при создании процедур. Удалил процедуру и создал ее заново с этой опцией. Опять не помогло.

Попробовал в QA удалить из этой т.фактов несколько записей вручную, запросом "delete... where..."
Теперь вылезла ошибка: "DELETE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'"

Это-то здесь при чем??? В таблице нет полей с хитрыми названиями. Максимум буквы латинского алфавита и символ подчеркивания в середине названия.

Подскажите, что я делаю не так?
ПС. MSSQL2000
4 июн 12, 11:19    [12660444]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
при том, что

'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.

с какими пар-ами скомпилирована процедура?!
с какими параметрами инструкция set при удалении из QA?
4 июн 12, 11:29    [12660499]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
Knyazev Alexey
с какими пар-ами скомпилирована процедура?!

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
Knyazev Alexey
с какими параметрами инструкция set при удалении из QA?

ни с какими. Просто выполнил "delete..." и получил ошибку.
4 июн 12, 11:54    [12660680]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
нуб987
ни с какими. Просто выполнил "delete..." и получил ошибку.


set quoted_identifier, nocount on
go
if object_id ( 'tbl_20120604_01', 'U' ) is not null
drop table tbl_20120604_01
go

create table tbl_20120604_01 ( a int, b int, c as a + b )
go
create index xxx on tbl_20120604_01 ( c )
go 

insert into tbl_20120604_01
select 1, 1
go
set quoted_identifier off
go
insert into tbl_20120604_01
select 2, 2
go


select * from tbl_20120604_01
4 июн 12, 12:17    [12660843]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
Knyazev Alexey, все равно неясно, при чем тут опция QUOTED_IDENTIFIER
у нас же (и у вас) нет нигде кавычек. Из-за чего выдает ошибку в вашем примере при выключенной опции QUOTED_IDENTIFIER?
4 июн 12, 12:45    [12661043]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
Glory
Member

Откуда:
Сообщений: 104760
нуб987
Knyazev Alexey, все равно неясно, при чем тут опция QUOTED_IDENTIFIER
у нас же (и у вас) нет нигде кавычек

А причем тут ваши кавычки ?
Сервер сообщает о состоянии настройки QUOTED_IDENTIFIER, а не о тексте вашего запроса
4 июн 12, 12:47    [12661065]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
Glory, но ведь эта опция разрешает или запрещает использование имен объектов в кавычках.
К чему сервер мне сообщает о состоянии этой опции? Она ведь нас никаким боком не должна затрагивать(?), т.к. у нас этих кавычек вообще нет
4 июн 12, 12:54    [12661117]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
Glory
Member

Откуда:
Сообщений: 104760
нуб987
Glory, но ведь эта опция разрешает или запрещает использование имен объектов в кавычках.
К чему сервер мне сообщает о состоянии этой опции?

Именно к тому, что сервер не знает, что вы там написали или напишите в запросе.
4 июн 12, 13:02    [12661187]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
нуб987,

http://msdn.microsoft.com/en-us/library/ms189292(v=sql.105).aspx
SET Option Requirements

The ANSI_NULLS connection-level option must be set to ON when the CREATE TABLE or ALTER TABLE statement that defines the computed column is executed. The OBJECTPROPERTY function reports whether the option is on through the IsAnsiNullsOn property.


The connection on which the index is created, and all connections trying INSERT, UPDATE, or DELETE statements that will change values in the index, must have six SET options set to ON and one option set to OFF. The optimizer ignores an index on a computed column for any SELECT statement executed by a connection that does not have these same option settings.

The NUMERIC_ROUNDABORT option must be set to OFF, and the following options must be set to ON:


ANSI_NULLS


ANSI_PADDING


ANSI_WARNINGS


ARITHABORT


CONCAT_NULL_YIELDS_NULL


QUOTED_IDENTIFIER


Setting ANSI_WARNINGS to ON implicitly sets ARITHABORT to ON when the database compatibility level is set to 90. If the database compatibility level is set to 80 or earlier, the ARITHABORT option must explicitly be set to ON. For more information, see SET Options That Affect Results.

4 июн 12, 13:05    [12661202]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
invm
The connection on which the index is created, and all connections trying INSERT, UPDATE, or DELETE statements that will change values in the index, must have six SET options set to ON and one option set to OFF.

вставил такой текст в начале процедуры перед командой create procedure...:
set NUMERIC_ROUNDABORT off
go
set ANSI_NULLS on
go
set ANSI_PADDING on
go
set ANSI_WARNINGS on
go
set ARITHABORT on
go
set CONCAT_NULL_YIELDS_NULL on
go
set QUOTED_IDENTIFIER on
go

ошибка все та же, описанная в первом посте...
ПС. А зачем серверу обязательно "must have six SET options set to ON and one option set to OFF", если я пытаюсь что-то вставить/удалить/обновить в таблице с вычисляемым полем?
Причем тут деление на ноль (ARITHABORT) или эти кавычки при использовании зарезервированных слов в именах объектов (QUOTED_IDENTIFIER)? У меня ведь нигде этого нет. ЗАЧЕМ серверу эти опции, почему он требует от меня их установки в определенные значения?
И почему все равно ничего не работает?
ПС. вы извините за крики души, просто реально нет понимая. "Смотрю в книгу, вижу фигу"...
Споткнулся на пустом месте... "Ты видишь суслика граблю? И я не вижу... А она есть..."
4 июн 12, 13:28    [12661373]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
нуб987
А зачем серверу обязательно "must have six SET options set to ON and one option set to OFF", если я пытаюсь что-то вставить/удалить/обновить в таблице с вычисляемым полем?
Причем тут деление на ноль (ARITHABORT) или эти кавычки при использовании зарезервированных слов в именах объектов (QUOTED_IDENTIFIER)? У меня ведь нигде этого нет. ЗАЧЕМ серверу эти опции, почему он требует от меня их установки в определенные значения?
Чтобы гарантировать одинаковость результата вычисления одного и того же выражения в разных соединениях.
нуб987
И почему все равно ничего не работает?
Потому что установки ansi_nulls и quoted_identifier запоминаются при создании процедуры. И их изменение внутри процедуры в рантайме не имеет эффекта.
4 июн 12, 13:49    [12661542]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
invm
Потому что установки ansi_nulls и quoted_identifier запоминаются при создании процедуры. И их изменение внутри процедуры в рантайме не имеет эффекта.

что значит в рантайме?
я же говорю, я уже удалил процедуру и создаю ее заново из QA, прописывая в начале все эти опции:
set NUMERIC_ROUNDABORT off
go
set ANSI_NULLS on
go
set ANSI_PADDING on
go
set ANSI_WARNINGS on
go
set ARITHABORT on
go
set CONCAT_NULL_YIELDS_NULL on
go
set QUOTED_IDENTIFIER on
go

create procedure.....

Все равно не работает и вываливается все с той же ошибкой
4 июн 12, 14:56    [12662075]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
Glory
Member

Откуда:
Сообщений: 104760
нуб987
я же говорю, я уже удалил процедуру и создаю ее заново из QA, прописывая в начале все эти опции:

select OBJECTPROPERTY('IsQuotedIdentOn', OBJECT_ID('myschema.myprocedure')) AS IsQuotedIdentOn

нуб987
Все равно не работает и вываливается все с той же ошибкой

У таблицы есть триггера ?
4 июн 12, 15:00    [12662101]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
Glory
select OBJECTPROPERTY('IsQuotedIdentOn', OBJECT_ID('myschema.myprocedure')) AS IsQuotedIdentOn

здесь параметры перепутаны местами ;) (возможно только для 2000 СКЛя (?))
select OBJECTPROPERTY(OBJECT_ID('MyBase.dbo.MyProc'), 'IsQuotedIdentOn') AS IsQuotedIdentOn
возвращает: 1
Glory
У таблицы есть триггера ?

нет
4 июн 12, 15:12    [12662179]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
нуб987,

Чудес на свете не бывает. Добавьте в процедуру
select @@options
и приведите его результат.
4 июн 12, 15:34    [12662381]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
нуб987
Knyazev Alexey, все равно неясно, при чем тут опция QUOTED_IDENTIFIER
у нас же (и у вас) нет нигде кавычек. Из-за чего выдает ошибку в вашем примере при выключенной опции QUOTED_IDENTIFIER?


http://www.t-sql.ru/post/QUOTED_IDENTIFIER.aspx
4 июн 12, 21:39    [12664419]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
invm
Добавьте в процедуру
select @@options
и приведите его результат.

вернуло: 5496
4 июн 12, 21:39    [12664421]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
Knyazev Alexey
нуб987
Knyazev Alexey, все равно неясно, при чем тут опция QUOTED_IDENTIFIER
у нас же (и у вас) нет нигде кавычек. Из-за чего выдает ошибку в вашем примере при выключенной опции QUOTED_IDENTIFIER?

http://www.t-sql.ru/post/QUOTED_IDENTIFIER.aspx

видимо я сильно глупый.... Но вообще понять не могу, с какой стати эта настройка так меняет поведение СКЛя?
В BOL написано только про возможность использования зарезервированных слов в кавычках. А тут оказывается столько всего скрытого и неочевидного...
Типа купили вы авто, а оно не едет. И бензин вроде нормальный и колеса круглые... Но не едет.
А оказывается покрышки должны быть зеленого цвета. Как-то так...
4 июн 12, 22:00    [12664502]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
нуб987,

а ещё isnumeric([DocNo]) = 1 совсем даже не гарантирует конвертируемость в int...
Не всё Вы вычитали на форуме! Ох, не всё...
4 июн 12, 22:04    [12664509]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
Glory
Member

Откуда:
Сообщений: 104760
нуб987
видимо я сильно глупый.... Но вообще понять не могу, с какой стати эта настройка так меняет поведение СКЛя?
В BOL написано только про возможность использования зарезервированных слов в кавычках. А тут оказывается столько всего скрытого и неочевидного...

В BOL перечислены все настройки коннекта, которые необходимы для вычисляемых индексированных полей
А вы начинаете искать какой то скрытый смысл
4 июн 12, 22:08    [12664518]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
iap
нуб987,

а ещё isnumeric([DocNo]) = 1 совсем даже не гарантирует конвертируемость в int...

это не страшно. Главное, чтобы в int преобразовал.
select cast(1.1 as int)


Вопросы, описанные в первом посте все еще имеют силу...
4 июн 12, 22:10    [12664525]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
Glory
В BOL перечислены все настройки коннекта, которые необходимы для вычисляемых индексированных полей
А вы начинаете искать какой то скрытый смысл

Да, в BOL сказано, что если есть индекс на вычисляемом поле и мы хотим сделать insert, update или delete, то должны быть включены 6 опций и одна выключена.
Но почему это должно быть сделано, там не сказано. Отсюда и вопросы
4 июн 12, 22:28    [12664569]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
Glory
Member

Откуда:
Сообщений: 104760
нуб987
Но почему это должно быть сделано, там не сказано. Отсюда и вопросы

Уже отвечали.
Потому что все эти настройки влияют на вычисления

set ansi_warnings off
set arithabort off
go
select 1/0
go
set ansi_warnings on
set arithabort on
go
select 1/0

Остальные можете проверить сами
4 июн 12, 22:37    [12664604]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
нуб987
вернуло: 5496
Это соответствует следующим опциям, установленным в "ON":
ANSI_WARNINGS
ANSI_PADDING
ANSI_NULLS
ARITHABORT
QUOTED_IDENTIFIER
ANSI_NULL_DFLT_ON
CONCAT_NULL_YIELDS_NULL

Так что что-то вы темните...
4 июн 12, 23:20    [12664799]     Ответить | Цитировать Сообщить модератору
 Re: вычисляемое поле и ARITHABORT  [new]
нуб987
Guest
invm
Так что что-то вы темните...

кхм.... даже не знаю, что и ответить :)
а вообще день сегодня (да и прошедшая неделя) был странный.
То процессинг куба занимал час-полтора, то вдруг последние несколько дней стал процесситься 4-5 часов. Да и сегодня какой-то бред возвращал: фильтры не работают, цифры вообще не те. Хотя другой куб на той же базе, который и обновляется сразу следом за первым (глючным), вроде в порядке.
Запустил сегодня процессинг этого странного куба руками (не из джоба пакетом DTS, а из AnalysisManager'а) - отпроцессился нормально за час и данные поправились.
То сейчас еще с одной процедурой мудрю (заливает данные в т.фактов, но не сабжевую, а другую). Так вот, почему-то опять данные не те и вообще записей в 6 раз больше, чем должно быть. Стал смотреть на нее внимательно (прогнал пару запросов, запустил еще раз перезаливку, ничего не меняя в процедуре), хоп и все в порядке. Вот сейчас данные заново заливаю, посмотрим.
Мистика прямо.
5 июн 12, 01:35    [12665192]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить