У меня есть сценарий Transact SQL, который создает таблицу AND функцию значения таблицы на основе этой таблицы, которую я вызываю из другого скрипта с использованием режима SQLCMD; например:Ошибка TRANSACT SQL 216
: \. г MyTableScript.sql
Все работает хорошо, как в БД времени генерации и во время выполнения. Теперь я разделить сценарий на два файла, чтобы отделить функцию, я в конечном итоге с чем-то вроде этого в «мастер-сценарий»:
: г \ MyTableScript.sql
:. Г \ MyTableFunctionScript.sql.
Все работает хорошо, чтобы сгенерировать базу данных, однако, когда я вызываю функцию, я получаю сообщение об ошибке «216 Параметры не были предоставлены для функции».
Это странно.
Если я вызываю функцию с неправильным количеством параметров, я получаю правильное сообщение, что-то вроде «... недопустимое число или аргументы ...»; если я вызываю функцию с аргументами неправильного типа, то снова я получаю соответствующее сообщение о неправильном типе для аргументов.
Но когда я вызываю функцию с правильными аргументами, я получаю вышеупомянутое сообщение.
Я знаю, что CREATE FUNCTION должно быть первым утверждением в партии, и это так. Я также пробовал с и без точки с запятой в «правильных» местах.
Теперь я вернул функцию в тот же файл сценария, что и сама таблица (сразу после DDL для таблицы) и регенерирует базу данных, и теперь все снова работает отлично.
Я могу оставить его как это (таблица и функция в одном большом файле сценария), НО я предпочел бы пролистывать таблицу и скрипты функций в два файла сценариев SQL.
Что я делаю неправильно?
Спасибо. Я не упоминал об этом, но да, я тоже это пробовал, с параметрами/witout, установленными в NULL. Точно такой же код работает отлично, когда в одном файле сценария, но не при разбиении на два файла. –
Вы уверены, что параметры переданы правильно между двумя сценариями? Обычно я использую PRINT @Variable, чтобы все было в порядке. – tezzo
Спасибо. Да: в коде нет изменений: это просто вырезание и вставка. Между ними нет линии, просто код находится в отдельном файле, например: r file.sql vs: r file1.sql, а затем на следующей строке: r file2.sql –