无法在rails控制台中执行存储过程(activerecord-sqlserver-adapter)

时间:2015-08-24 22:35:31

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

我正在使用rails console尝试执行以下存储过程:

exec dbo.MP_RPT_Q_VENTAS_TOP_PRODUCTOS @COD_CTE='',@COD_DOC='T',@FECHA1='2015-01-01',@FECHA2='2015-23-06',@COD_GRUPO='',@COD_ZONA='',@PORCENTAJE=30,@DESCRI='',@MIN='X',@CONTADO='',@COD_AGRICOLA='',@COD_GRUPO_PROD_INTERES='',@UTILIDAD_MAXIMA='101',@CATEGORIA='',@FILTRAR_VALOR='C',@CODIGO_INGREDIENTE_ACTIVO='',@CODIGOS_PRODUCTOS='',@CLASIFICACION='T',@ORDEN='$UTILIDAD',@FORMATO_ASP='0',@CLASIFICACION2='T',@CLASIFICACION3='T',@TIPO_CLIENTE='TODOS',@COD_LOTE=''

为此,我运行以下命令,请注意我对参数进行条带化并仅保留值:

Almacen.execute_procedure("MP_RPT_Q_VENTAS_TOP_PRODUCTOS", '','T','2015-01-01','2015-23-06','','',30,'','X','','','','101','','C','','','T','$UTILIDAD','0','T','T','TODOS','')

当我尝试运行该行时,出现以下错误:

TinyTds::Error: The conversion of a varchar data type to a smalldatetime data ty
pe resulted in an out-of-range value.: EXEC MP_RPT_Q_VENTAS_TOP_PRODUCTOS '', 'T
', '2015-01-01', '2015-23-06', '', '', 30, '', 'X', '', '', '', '101', '', 'C',
'', '', 'T', '$UTILIDAD', '0', 'T', 'T', 'TODOS', ''
ActiveRecord::StatementInvalid: TinyTds::Error: The conversion of a varchar data
 type to a smalldatetime data type resulted in an out-of-range value.: EXEC MP_R
PT_Q_VENTAS_TOP_PRODUCTOS '', 'T', '2015-01-01', '2015-23-06', '', '', 30, '', '
X', '', '', '', '101', '', 'C', '', '', 'T', '$UTILIDAD', '0', 'T', 'T', 'TODOS'
, ''
        from C:/Ruby21-x64/lib/ruby/gems/2.1.0/gems/activerecord-sqlserver-adapt
er-4.0.0/lib/active_record/connection_adapters/sqlserver/database_statements.rb:
96:in `each'
        from C:/Ruby21-x64/lib/ruby/gems/2.1.0/gems/activerecord-sqlserver-adapt
er-4.0.0/lib/active_record/connection_adapters/sqlserver/database_statements.rb:
96:in `block in execute_procedure'

...

我尝试通过在它们之间删除引号来更改这些日期,然后执行商店,但没有结果,这是不正确的。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  

错误:varchar数据的转换    键入smalldatetime数据类型会导致超出范围的值

此类错误表示您以DB期望的格式传递日期。例如:当格式为YEAR-MONTH-DAY时,转换字符串'2015-23-06'到SMALLDATETIME失败。没有第23个月。

可能的解决方案:

  • 以正确的日期格式'2015-06-23'
  • 提供参数
  • 更改日期格式SET DATEFORMAT ydm
相关问题