0

我们使用 edge-sql 来执行 T-SQL 脚本以及通过 C# 的存储过程。我最近注意到已经添加了存储过程支持,我正在尝试执行将是:

exec dbo.sgRouteExportDelete @TripDate='2014-05-06', @RouteId = 1234, @Action='DELETE', @Comment='xxxxxx';

在 SQL Server Management Studio 中,使用 edge-sql 0.1.2。

我玩过几种变体,但我收到了 2 条错误消息之一。cannot find stored procedure ''通过 C# 方法调用时,存储过程在edge.sql"cannot find stored procedure 'sgRouteExportDelete @TripDate='2014-05-06', @RouteId = 1234, @Action='DELETE', @Comment='xxxxxx'"中执行得很好。

我做了一些额外的实验,发现我可以执行不带参数的存储过程:exec dbo.sgVersionGet,但是任何带参数的存储过程都会返回错误。

那么我做错了什么?如上所述,我如何使用非硬编码的参数值进行调用?SQL Server 和 edge 都使用 @ 字符来解析参数。

任何帮助表示赞赏...

-比利B

4

2 回答 2

0

在 SQL Server 中,当您引用没有对象完整路径 ([database.schema].object) 的数据库对象时,SQL Server 将尝试使用指向默认数据库的默认/初始目录值来定位对象,如果那是未在连接字符串中指定,那么当您尝试运行语句时,SQL Server 将无法找到引发“找不到 XX”错误的对象,您应该在连接字符串上指定初始目录或执行您的使用完整路径的过程,database.schema.procedure 例如 mydatabase.dbo.sp_customerCleanUp。另一方面,有一个内部过程 sp_executesql,您可以使用它来运行您的过程,而无需对参数进行硬编码,https://technet.microsoft.com/en-us/library/ms175170%28v=sql.105%29.aspx

于 2015-05-28T17:00:22.483 回答
0

使用 edge-sql 调用存储过程时假定变量。任何以“@”符号开头的参数都需要在存储过程中具有相同的名称。

于 2016-07-11T19:13:07.420 回答