Проблема с SET FMTONLY ON - PullRequest
       18

Проблема с SET FMTONLY ON

1 голос
/ 16 сентября 2008

Я выполняю хранимые процедуры, используя SET FMTONLY ON, чтобы подражать тому, что делает наш генератор кода. Тем не менее, кажется, что результаты кэшируются при выполнении таким образом, так как я все еще получаю Ошибка преобразования от процесса, который я только что удалил! Это происходит даже тогда, когда я выполняю процесс без SET FMTONLY ON.

Может кто-нибудь сказать мне, что здесь происходит?

Ответы [ 3 ]

1 голос
/ 24 октября 2008

Некоторые операторы все еще будут выполняться, даже с SET FMTONLY ON. Ваша ошибка «Преобразование не удалась» может быть вызвана чем-то простым, например, оператором set variable в хранимом процессе Например, это возвращает метаданные для первого запроса, но выдает исключение при выполнении последнего оператора:

SET FMTONLY on

select 1 as a

declare @a int
set @a = 'a'

Что касается запуска отброшенной процедуры, это для меня новинка. SQL Server использует системные таблицы для определения объекта для выполнения, поэтому не имеет значения, кэшируется ли план выполнения для этого объекта. Если вы удаляете его, он удаляется из системных таблиц и никогда не должен быть исполняемым. Не могли бы вы запросить sysobjects (или sys.objects) непосредственно перед выполнением процедуры? Я полагаю, вы обнаружите, что не бросили его.

0 голосов
/ 17 июля 2009

Операторы DDL анализируются, но игнорируются при запуске, если в соединении была выполнена команда SET FMTONLY ON. Поэтому, если вы отбрасываете процедуру, таблицу и т. Д. При включенном FMTONLY, оператор анализируется, но действие не выполняется.

Попробуйте это проверить

SET FMTONLY OFF

- Создать таблицу для тестирования на

CREATE TABLE TestTable (Column1 INT, Column2 INT)

- вставить 1 запись

INSERT INTO TestTable (Column1, Column2)
VALUES (1,2)

- проверить правильность вставленной записи

SELECT * FROM TestTable

- теперь установлен только формат ON

SET FMTONLY ON

- столбцы возвращаются, но нет данных

SELECT * FROM TestTable

- выполнить оператор DDL с FMTONLY ON

DROP TABLE TestTable

- снова выключить FMTONLY

SET FMTONLY OFF

- Таблица была отброшена выше, поэтому это не должно работать

SELECT * FROM TestTable

DROP TABLE TestTable

SELECT * FROM TestTable
0 голосов
/ 16 сентября 2008
  1. Это звучит как ошибка на стороне клиента. Вы получаете то же сообщение при запуске через SQL Management Studio?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...