通过activerecord-sqlserver-adapter连接到SQL Server 2005时,从Rails执行SQL查询

时间:2010-06-30 18:33:22

标签: ruby-on-rails sql-server-2005 activerecord

所以我通过activerecord-sqlserver-adapter从我的Rails应用程序连接到SQL Server 2005.

我可以通过执行

来执行存储过程
Mymodel.execute_procedure("thisProcedure", param1, param2)

但是我有一个存储过程,它有一个SQL INOUT变量,我遇到了麻烦。我执行它,我没有看到该变量返回。

所以现在我正在尝试执行一些原始的sql,例如

declare @thisVar int
EXEC thatProcedure 1, 1, @thisVar = @thisVar output
print @thisVar

当我这样做时

sql = "declare @thisVar int
EXEC thatProcedure 1, 1, @thisVar = @thisVar output
print @thisVar"

foo = Mymodel.connection.execute(sql)

我没有收到任何错误,一切看起来都很成功。我得到了一个DBI :: StatementHandle类的foo。我如何实际看到SQL的响应?

提前致谢!

1 个答案:

答案 0 :(得分:4)

自从我进入DBI以来已经有一段时间了,我们将存储过程留给了ORM。要从StatementHandle对象获取数据,您需要发出全部提取。这应该包含所有返回值/输出参数以及结果集(如果适用于数组)。这是dbi版本.4.1,我相信它是使用sqlserver适配器的最后一个版本。

sql = "declare @thisVar int
EXEC thatProcedure 1, 1, @thisVar = @thisVar output
print @thisVar"

foo = Mymodel.connection.execute(sql)

result_array = foo.fetch_all

然后你可以遍历生成的数组。

以下是DBI文档http://ruby-dbi.rubyforge.org/rdoc/index.html

您可能还想查看新的activerecord-sqlserver-adapter。它完全消除了DBI,但不确定它如何处理SP。

http://github.com/rails-sqlserver/2000-2005-adapter

我的建议,对于它的价值,混合ORM和存储过程非常困难,因为你在两层之间分割业务逻辑,而且管理起来越来越困难。

祝你好运!