FreeTDS / unixODBC UPDATE не удалось, потому что следующие параметры SET имеют неправильные настройки: 'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING'

У меня есть хранимая процедура, в которой есть обновление таблицы с вычисляемым постоянным столбцом. При запуске хранимой процедуры из Management Studio она работает нормально. Но когда я запускаю его с unixODBC isql, я получаю эту ошибку

[37000][unixODBC][FreeTDS][SQL Server]UPDATE failed because the following
SET options have incorrect settings: 'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS,
ANSI_PADDING'. Verify that SET options are correct for use with indexed views
and/or indexes on computed columns and/or query notifications and/or xml data
type methods.

Я также получаю это сообщение об ошибке из Management Studio, если помещаю в свою хранимую процедуру следующее:

SET ANSI_PADDING OFF
SET ANSI_WARNINGS OFF

Я попытался установить для них значение «ON» в хранимой процедуре, но это не сработало.

Я также пробовал добавить

AnsiNPW = 1

в моем шаблоне источника данных unixODBC.

Я даже попытался воссоздать хранимую процедуру, установив для ANSI_PADDING и ANSI_WARNINGS значение ON перед предложением CREATE PROCEDURE.

Хотя, похоже, ничего не меняет.

Любые предложения приветствуются


person dseiple    schedule 16.08.2013    source источник


Ответы (1)


Рассматривая это подробнее, MSDN говорит об операторах SET в хранимых процедурах

Stored procedures execute with the SET settings specified at execute time except
for SET ANSI_NULLS and SET QUOTED_IDENTIFIER. Stored procedures specifying SET
ANSI_NULLS or SET QUOTED_IDENTIFIER use the setting specified at stored procedure
creation time. If used inside a stored procedure, any SET setting is ignored.

Это объясняет, почему установка их в хранимой процедуре ничего не дала.

Чтобы обойти это, я установил их перед вызовом моей хранимой процедуры следующим образом:

SET CONCAT_NULL_YIELDS_NULL, ANSI_PADDING, ANSI_WARNINGS ON; EXEC myProc ...
person dseiple    schedule 16.08.2013