您必须添加包含CLR代码的已编译DLL作为参考。因此,在您的MyDb SSDT项目->参考(右键单击)->添加参考下,浏览到DLL。
如果您在同一解决方案中有CLR(类库)项目,则可能可以引用该项目而不是DLL,但是在我的情况下,我引用的是DLL(为单独的解决方案编译)。
至于
AS EXTERNAL NAME行的格式:
AS EXTERNAL NAME [AssemblyName].[ClassName].[FunctionName]
注意: 对于CLR对象,为了简化起见,我从类/代码周围删除了名称空间,因为此步骤通常是最有问题的。容易混淆AssmeblyName /
DLL名称/命名空间。通过访问“项目属性”->“应用程序”->“程序集名称:”,可以在CLR类库项目中找到AssemblyName。我会从中删除所有非字母数字/空格,只是为了简化名称并排除出现问题。
因此,我会尝试一下,一旦您能正常工作,如果您真的想要名称空间,则可以添加名称空间并从中找出语法,至少您知道其他部分是正确的。
确定,您实际上在同一个SSDT项目中有一个* .cs文件。所以在这种情况下,如果您的代码是这样的:
CS文件:
public partial class UserDefinedFunctions{ [Microsoft.SqlServer.Server.SqlFunction] public static SqlString SqlFunction1() { // Put your pre here return new SqlString (string.Empty); }}
SQL文件:
CREATE PROCEDURE ClrMethod1 RETURNS [int] WITH EXECUTE AS CALLERAS EXTERNAL NAME [MyDB].[UserDefinedFunctions].[SqlFunction1]
这为我编译。 注意: 再次没有使用名称空间。当我执行Add New Item …时,生成的代码没有命名空间。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)