我正在尝试将发送电子邮件程序集从一个数据库复制到另一个数据库。我单击了“创建脚本”,然后在新数据库中创建了它。
当我尝试在较新的数据库中发送带有该功能的电子邮件时,出现以下错误:
参数'fileName'不能为空字符串。参数名称:fileName
如何在数据库之间复制程序集?
一些细节:
UNSAFE
TRUSTWORTHY
如何在数据库之间复制程序集?
到目前为止,我还没有看到这是一个SQLCLR问题。您清楚地复制了Assembly和T-SQL包装对象,否则将得到T-SQL错误而不是.NET错误。
我以创建脚本的方式单击了脚本程序集,并在新数据库中创建了它。
鉴于您编写了T-SQL包装对象的脚本和,您遇到了与输入参数有关的错误,您可能会遇到一个错误,该错误会导致NVARCHAR
参数的默认值无法正确编写:
SSMS scripting CLR stored procedure NVARCHAR parameter NULL default as N'' (empty string)
在新旧数据库中执行以下操作,以确保所有参数定义都相同,包括任何潜在的默认值(请密切注意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