Выполнить SQL-запрос из Rails при подключении к SQL Server 2005 через activerecord-sqlserver-adapter - PullRequest
2 голосов
/ 30 июня 2010

Итак, я подключаюсь к SQL Server 2005 из моего приложения на Rails через activerecord-sqlserver-adapter.

Я могу выполнить сохраненные процессы, выполнив

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)

Я не получаю никаких ошибок, и все выглядит успешно. Я получаю обратно foo, который имеет класс DBI :: StatementHandle. Как я на самом деле вижу ответ от SQL?

Заранее спасибо!

1 Ответ

4 голосов
/ 30 июня 2010

Прошло много времени с тех пор, как я вошел в 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 и хранимые процедуры, чрезвычайно сложно, потому что вы разделяете бизнес-логику между двумя уровнями, и управлять ею становится все сложнее.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...