鑑於以下紅寶石:TinyTds ::錯誤:過程預計參數
sql2 = 'SELECT (CASE WHEN freq = 0 THEN \'pass\' ELSE \'fail\' END) FROM (
SELECT COUNT(*) freq FROM Grant_Award WHERE Grant_Award.org_ticker IS NULL)x;'
pp ActiveRecord::Base.connection.select_all(sql2)
sql1 = "SELECT (CASE WHEN freq = 0 THEN 'pass' ELSE 'fail' END) FROM (SELECT COUNT(*) freq FROM Grant_Award WHERE Grant_Award.org_ticker IS NULL)x;"
pp ActiveRecord::Base.connection.select_all(sql1)
sql0 = File.readlines(File.join(BASE,'db','scripts','test','pass_or_fail.sql'))
sql = (sql0.map {|l| l.strip}).join(' ')
pp sql
pp ActiveRecord::Base.connection.select_all(sql)
上面產生以下結果:
#<ActiveRecord::Result:0x38b0ce0
@column_types={},
@columns=[""],
@hash_rows=nil,
@rows=[["pass"]]>
#<ActiveRecord::Result:0x38b5ae0
@column_types={},
@columns=[""],
@hash_rows=nil,
@rows=[["pass"]]>
"SELECT (CASE WHEN freq = 0 THEN 'pass' ELSE 'fail' END) FROM (SELECT COUNT(*) freq FROM Grant_Award WHERE Grant_Award.org_ticker IS NULL)x;"
C:/Ruby193/lib/ruby/gems/1.9.1/gems/activerecord-sqlserver-adapter-4.2.2/lib/active_record/connection_adapters/sqlserver/database_statements.rb:336:in `each': TinyTds::Error: Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.: EXEC sp_executesql 'SELECT (CASE WHEN freq = 0 THEN ''pass'' ELSE ''fail'' END) FROM (SELECT COUNT(*) freq FROM Grant_Award WHERE Grant_Award.org_ticker IS NULL)x;' (ActiveRecord::StatementInvalid)
在執行SQL返回就好前兩個嘗試。第三個從文件讀入數組然後加入炸彈。我知道這一定與絃樂的處理有關。但我無法弄清楚這一點。
我在做什麼錯?爲什麼它(tinytds或activerecord?)認爲這是一個存儲過程?
我想要做的是在一個文件夾中有一大堆sql腳本,然後逐個執行它們。
詳細信息:紅寶石1.9.3,ActiveRecord的(4.2.0),和tiny_tds(0.6.2 86的mingw32)
什麼做的語句結尾的X?這對我來說是錯誤的。 – ReggieB 2015-03-25 08:46:55