2013-06-14 3 views
0

У меня есть сценарий Transact SQL, который создает таблицу AND функцию значения таблицы на основе этой таблицы, которую я вызываю из другого скрипта с использованием режима SQLCMD; например:Ошибка TRANSACT SQL 216

: \. г MyTableScript.sql

Все работает хорошо, как в БД времени генерации и во время выполнения. Теперь я разделить сценарий на два файла, чтобы отделить функцию, я в конечном итоге с чем-то вроде этого в «мастер-сценарий»:

: г \ MyTableScript.sql

:. Г \ MyTableFunctionScript.sql.

Все работает хорошо, чтобы сгенерировать базу данных, однако, когда я вызываю функцию, я получаю сообщение об ошибке «216 Параметры не были предоставлены для функции».

Это странно.

Если я вызываю функцию с неправильным количеством параметров, я получаю правильное сообщение, что-то вроде «... недопустимое число или аргументы ...»; если я вызываю функцию с аргументами неправильного типа, то снова я получаю соответствующее сообщение о неправильном типе для аргументов.

Но когда я вызываю функцию с правильными аргументами, я получаю вышеупомянутое сообщение.

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

Теперь я вернул функцию в тот же файл сценария, что и сама таблица (сразу после DDL для таблицы) и регенерирует базу данных, и теперь все снова работает отлично.

Я могу оставить его как это (таблица и функция в одном большом файле сценария), НО я предпочел бы пролистывать таблицу и скрипты функций в два файла сценариев SQL.

Что я делаю неправильно?

ответ

0

Возможно, вы передаете правильное количество аргументов, но один из них имеет значение NULL.

+0

Спасибо. Я не упоминал об этом, но да, я тоже это пробовал, с параметрами/witout, установленными в NULL. Точно такой же код работает отлично, когда в одном файле сценария, но не при разбиении на два файла. –

+0

Вы уверены, что параметры переданы правильно между двумя сценариями? Обычно я использую PRINT @Variable, чтобы все было в порядке. – tezzo

+0

Спасибо. Да: в коде нет изменений: это просто вырезание и вставка. Между ними нет линии, просто код находится в отдельном файле, например: r file.sql vs: r file1.sql, а затем на следующей строке: r file2.sql –

Смежные вопросы