如何使用T-SQL脚本调用带有参数的存储过程?

时间:2015-05-28 16:30:12

标签: edge.js

我们正在使用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 ''"cannot find stored procedure 'sgRouteExportDelete @TripDate='2014-05-06', @RouteId = 1234, @Action='DELETE', @Comment='xxxxxx'"当通过C#方法调用时,存储的proc在edge.sql中执行得很好。

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

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

任何帮助表示赞赏...

-BillyB

2 个答案:

答案 0 :(得分:0)

在SQL Server中引用没有对象完整路径的数据库对象([database.schema] .object)时,SQL Server将尝试使用指向默认数据库的Default / Initial Catalog值来定位对象如果未在连接字符串中指定,那么当您尝试运行语句时,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

答案 1 :(得分:0)

The variables are assumed when calling a stored procedure with edge-sql. Any parameter you would preface with an '@' symbol will need to have the same name within the stored procedure.