我创建了一个Visual C#SQL CLR数据库项目。我添加了两个stored procedure:test1.cs
和test2.cs
。我在test1.cs
中有AddNumber
的函数。
在test2.cs
中,我希望有一个具有相同名称的函数,它将执行其他操作,但这是我重建后得到的错误:
类型'StoredProcedures'已经定义了一个名为'AddNumber'的成员 具有相同的参数类型。
test1 的代码如下所示:
public partial class StoredProcedures {
[Microsoft.SqlServer.Server.SqlProcedure]
public static void test1(string Path) {
// Put your code here
}
private static void AddNumbers(int a, int b) {
}
};
测试2
public partial class StoredProcedures {
[Microsoft.SqlServer.Server.SqlProcedure]
public static void test2(string Path) {
// Put your code here
}
private static void AddNumbers(int a, int b) {
}
};
我不想更改名称,因为我有多个具有相同名称的其他功能。此外,两个文件中也有许多同名的变量。
答案 0 :(得分:2)
我尝试在其中一个文件中添加命名空间但在部署时遇到错误“语法错误”在sql server中部署它们的代码是:
CREATE PROCEDURE ADD_NUMBER(@Path nvarchar(400))AS EXTERNAL NAME Test.StoredProcedures.test1 go
我不确定你为什么要从你的问题中删除这一点。如果类StoredProcedures
位于名称空间Namespace
和程序集Test
中,则可以使用EXTERNAL NAME Test.[Namespace.StoredProcedures].test1
。就SQL而言,完整类型名称需要是单个标识符,并且由于完整类型名称包含点,因此需要引用它。
请注意,这会导致多个不同类型具有相同的名称StoredProcedures
。这没有问题,但它与将StoredProcedures
重命名为单独的类StoredProcedure1
和StoredProcedure2
具有相同的效果,重命名是您想要避免的一件事(尽管我看不到原因)。
答案 1 :(得分:0)
我认为你想通过调用你的类方法接口。这是一种简单而有条理的方式。
通过明确地实现接口,如下所示:
public interface ITest {
void Test();
}
public interface ITest2 {
void Test();
}
public class Dual : ITest, ITest2
{
void ITest.Test() {
Console.WriteLine("ITest.Test");
}
void ITest2.Test() {
Console.WriteLine("ITest2.Test");
}
}
请注意,这些函数对于类是私有的,因此您必须将该类的对象分配给定义为该特定接口的变量:
var dual = new Dual();
ITest test = dual;
test.Test();
ITest2 test2 = dual;
test2.Test();