SQL Функция SQLCLR сервера получает ошибку параметра после копирования из одной БД в другую - PullRequest
1 голос
/ 13 января 2020

Я пытаюсь скопировать отправку сборки электронной почты из одной базы данных в другую. Я нажал на сборку скрипта как создать и создал его в новой БД.

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

Параметр fileName не может быть пустой строкой. Имя параметра: имя_файла

Как скопировать сборку в базы данных?

Некоторые сведения:

  • Обе базы данных находятся в одном экземпляре
  • Обе БД принадлежат одному и тому же логину
  • Использование SQL Сервер 2016
  • Сборка помечена как UNSAFE в обеих БД
  • Обе БД имеют TRUSTWORTHY enabled
  • T- SQL Объект-обертка является скалярной функцией / UDF
  • Функция вызывается одинаково в обеих БД

1 Ответ

1 голос
/ 14 января 2020

Как я могу скопировать сборку между базами данных?

Пока я не вижу, как это проблема SQLCLR. Вы явно скопировали сборку и объект-обертку T- SQL, иначе вы получите ошибки T- SQL вместо. NET error.

Я нажал на сборку сценария как create и создали его в новой базе данных.

Учитывая, что вы запрограммировали объект-обертку T- SQL и , вы получаете ошибку, связанную с входным параметром, вы возможно, возникла ошибка, из-за которой значения по умолчанию для параметров NVARCHAR не были правильно написаны в сценарии:

Сценарии SSMS хранимая процедура CLR Параметр NVARCHAR по умолчанию NULL как N '' (пустая строка)

Выполните следующее в старых и новых БД, чтобы убедиться, что все определения параметров одинаковы, включая любые потенциальные значения по умолчанию (обращая пристальное внимание на строки, которые имеют 1 для [has_default_value]):

SELECT [name], [user_type_id], [max_length], [is_output],
       [has_default_value], [default_value]
FROM   sys.parameters prm
WHERE  prm.[object_id] = OBJECT_ID(N'dbo.ObjectName')
ORDER BY prm.[parameter_id];

Если вы обнаружите какие-либо различия, вам необходимо обновить ваш оператор CREATE, чтобы включить в него правильные значения по умолчанию. Например, если у вас есть:

@SomeParam [nvarchar](1 - 4000) = N``

Затем вам нужно будет обновить эту часть вашего сценария T- SQL, указав вместо этого:

@SomeParam [nvarchar](1 - 4000) = NULL

, а затем перезапустите CREATE (вам может понадобиться сначала DROP существующий объект-обертка T- SQL, или изменить CREATE на ALTER).

Пожалуйста голосовать за отчет об ошибке обратной связи, который я связал выше. Спасибо!

Для получения дополнительной информации о работе с SQLCLR в целом посетите: SQLCLR Info

...