Giter Site home page Giter Site logo

Comments (6)

aidanharan avatar aidanharan commented on May 29, 2024 1

The query that is throwing the error is:

SELECT CAST('' AS numeric(18,0)) AS value

It appears the default value of a column is an empty string but the column type is a number, which doesn't make sense. If you run the following query then you might be able to work out which column is causing this issue and what the fix might be.

EXEC sp_executesql N'SELECT o.name AS [table_name], c.name AS [name], t.name AS [type], d.definition AS [default_value], CASE WHEN t.name IN (''decimal'', ''bigint'', ''int'', ''money'', ''numeric'', ''smallint'', ''smallmoney'', ''tinyint'') THEN c.scale END AS [numeric_scale], CASE WHEN t.name IN (''decimal'', ''bigint'', ''int'', ''money'', ''numeric'', ''smallint'', ''smallmoney'', ''tinyint'', ''real'', ''float'') THEN c.precision END AS [numeric_precision], CASE WHEN t.name IN (''date'', ''datetime'', ''datetime2'', ''datetimeoffset'', ''smalldatetime'', ''time'') THEN c.scale END AS [datetime_precision], c.collation_name AS [collation], ROW_NUMBER() OVER (ORDER BY c.column_id) AS [ordinal_position], CASE WHEN t.name IN (''nchar'', ''nvarchar'') AND c.max_length > 0 THEN c.max_length / 2 ELSE c.max_length END AS [length], CASE c.is_nullable WHEN 1 THEN 1 END AS [is_nullable], CASE WHEN ic.object_id IS NOT NULL THEN 1 END AS [is_primary], c.is_identity AS [is_identity] FROM .sys.columns c INNER JOIN .sys.objects o ON c.object_id = o.object_id INNER JOIN .sys.schemas s ON o.schema_id = s.schema_id INNER JOIN .sys.types t ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id LEFT OUTER JOIN .sys.default_constraints d ON c.object_id = d.parent_object_id AND c.default_object_id = d.object_id LEFT OUTER JOIN .sys.key_constraints k ON c.object_id = k.parent_object_id AND k.type = ''PK'' LEFT OUTER JOIN .sys.index_columns ic ON k.parent_object_id = ic.object_id AND k.unique_index_id = ic.index_id AND c.column_id = ic.column_id WHERE o.name = @0 AND s.name = schema_name() ORDER BY c.column_id', N'@0 nvarchar(128)', @0 = N'WB_MSS'

from activerecord-sqlserver-adapter.

aidanharan avatar aidanharan commented on May 29, 2024

@no1-knows, Did the issue only start with v7.0.4.0? Does v7.0.3.0 have the same issue? Would you be able to create a script so that I can reproduce the issue? Thanks

from activerecord-sqlserver-adapter.

no1-knows avatar no1-knows commented on May 29, 2024

@aidanharan v7.0.2.0 had same issue. not tried v7.0.3.0.
I was developing sqlserver in docker which is no problem.
Now switch to production server which is not docker and have problem only this model.
I'm not sure if I can create a script because we're short on time before the deadline...

from activerecord-sqlserver-adapter.

aidanharan avatar aidanharan commented on May 29, 2024

You need to find the SQL that is actually being sent to your database as it looks like the issue is with the generated SQL.

If you open a Rails console and run WbMss.all.count then you should see the SQL. You might need to change your logging level to see it. If that doesn't work then run following from your Rails console.

ActiveSupport::Notifications.subscribe('sql.active_record') do |_name, _start, _finish, _id, payload|
   puts payload[:sql]
end
WbMss.all.count

from activerecord-sqlserver-adapter.

no1-knows avatar no1-knows commented on May 29, 2024

Thanks for your info!
I'm newbie but I understand a bit.

The flow to execute SQL is like follows:

  1. Rails access DB server and get table and columns info
  2. Rails create sql based on 1st info
  3. Error occur at WbMss

This means 1st info might be not correct.
That's why u said this.

it looks like the issue is with the generated SQL.

So I have 2 approaches

  1. Use to_sql and exec_query

sql = "SELECT [WB_MSS].* FROM [WB_MSS]"
result = ActiveRecord::Base.connection.exec_query(sql)

  1. Fix SQL Server setting

Is this correct?

ActiveSupport::Notifications.subscribe('sql.active_record') do |_name, _start, _finish, _id, payload|
   puts payload[:sql]
end
WbMss.all.count

DBCC USEROPTIONS WITH NO_INFOMSGS
USE [SKWEB]
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WITH (NOLOCK) WHERE TABLE_CATALOG = DB_NAME() AND TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'WB_MSS' AND TABLE_TYPE = N'VIEW' ORDER BY TABLE_NAME
EXEC sp_executesql N'SELECT o.name AS [table_name], c.name AS [name], t.name AS [type], d.definition AS [default_value], CASE WHEN t.name IN (''decimal'', ''bigint'', ''int'', ''money'', ''numeric'', ''smallint'', ''smallmoney'', ''tinyint'') THEN c.scale END AS [numeric_scale], CASE WHEN t.name IN (''decimal'', ''bigint'', ''int'', ''money'', ''numeric'', ''smallint'', ''smallmoney'', ''tinyint'', ''real'', ''float'') THEN c.precision END AS [numeric_precision], CASE WHEN t.name IN (''date'', ''datetime'', ''datetime2'', ''datetimeoffset'', ''smalldatetime'', ''time'') THEN c.scale END AS [datetime_precision], c.collation_name AS [collation], ROW_NUMBER() OVER (ORDER BY c.column_id) AS [ordinal_position], CASE WHEN t.name IN (''nchar'', ''nvarchar'') AND c.max_length > 0 THEN c.max_length / 2 ELSE c.max_length END AS [length], CASE c.is_nullable WHEN 1 THEN 1 END AS [is_nullable], CASE WHEN ic.object_id IS NOT NULL THEN 1 END AS [is_primary], c.is_identity AS [is_identity] FROM .sys.columns c INNER JOIN .sys.objects o ON c.object_id = o.object_id INNER JOIN .sys.schemas s ON o.schema_id = s.schema_id INNER JOIN .sys.types t ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id LEFT OUTER JOIN .sys.default_constraints d ON c.object_id = d.parent_object_id AND c.default_object_id = d.object_id LEFT OUTER JOIN .sys.key_constraints k ON c.object_id = k.parent_object_id AND k.type = ''PK'' LEFT OUTER JOIN .sys.index_columns ic ON k.parent_object_id = ic.object_id AND k.unique_index_id = ic.index_id AND c.column_id = ic.column_id WHERE o.name = @0 AND s.name = schema_name() ORDER BY c.column_id', N'@0 nvarchar(128)', @0 = N'WB_MSS'
SELECT CAST('' AS char(2)) AS value
SELECT CAST('' AS char(1)) AS value
SELECT CAST('' AS varchar(10)) AS value
SELECT CAST('' AS varchar(6)) AS value
SELECT CAST('' AS char(7)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS char(7)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS char(7)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(24)) AS value
SELECT CAST('' AS char(8)) AS value
SELECT CAST('' AS char(9)) AS value
SELECT CAST('' AS char(12)) AS value
SELECT CAST('' AS numeric(18,0)) AS value
/usr/local/bundle/gems/activerecord-sqlserver-adapter-7.0.4.0/lib/active_record/connection_adapters/sqlserver/database_statements.rb:454:in `each': TinyTds::Error: Error converting data type varchar to numeric. (ActiveRecord::StatementInvalid)
/usr/local/bundle/gems/activerecord-sqlserver-adapter-7.0.4.0/lib/active_record/connection_adapters/sqlserver/database_statements.rb:454:in `each': Error converting data type varchar to numeric. (TinyTds::Error)

ActiveSupport::Notifications.subscribe('sql.active_record') do |_name, _start, _finish, _id, payload|
   puts payload[:sql]
end
WbFzi.all.count


SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WITH (NOLOCK) WHERE TABLE_CATALOG = DB_NAME() AND TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'WB_FZI' AND TABLE_TYPE = N'VIEW' ORDER BY TABLE_NAME
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WITH (NOLOCK) WHERE TABLE_CATALOG = DB_NAME() AND TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'WB_FZI' AND TABLE_TYPE = N'VIEW' ORDER BY TABLE_NAME
EXEC sp_executesql N'SELECT o.name AS [table_name], c.name AS [name], t.name AS [type], d.definition AS [default_value], CASE WHEN t.name IN (''decimal'', ''bigint'', ''int'', ''money'', ''numeric'', ''smallint'', ''smallmoney'', ''tinyint'') THEN c.scale END AS [numeric_scale], CASE WHEN t.name IN (''decimal'', ''bigint'', ''int'', ''money'', ''numeric'', ''smallint'', ''smallmoney'', ''tinyint'', ''real'', ''float'') THEN c.precision END AS [numeric_precision], CASE WHEN t.name IN (''date'', ''datetime'', ''datetime2'', ''datetimeoffset'', ''smalldatetime'', ''time'') THEN c.scale END AS [datetime_precision], c.collation_name AS [collation], ROW_NUMBER() OVER (ORDER BY c.column_id) AS [ordinal_position], CASE WHEN t.name IN (''nchar'', ''nvarchar'') AND c.max_length > 0 THEN c.max_length / 2 ELSE c.max_length END AS [length], CASE c.is_nullable WHEN 1 THEN 1 END AS [is_nullable], CASE WHEN ic.object_id IS NOT NULL THEN 1 END AS [is_primary], c.is_identity AS [is_identity] FROM .sys.columns c INNER JOIN .sys.objects o ON c.object_id = o.object_id INNER JOIN .sys.schemas s ON o.schema_id = s.schema_id INNER JOIN .sys.types t ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id LEFT OUTER JOIN .sys.default_constraints d ON c.object_id = d.parent_object_id AND c.default_object_id = d.object_id LEFT OUTER JOIN .sys.key_constraints k ON c.object_id = k.parent_object_id AND k.type = ''PK'' LEFT OUTER JOIN .sys.index_columns ic ON k.parent_object_id = ic.object_id AND k.unique_index_id = ic.index_id AND c.column_id = ic.column_id WHERE o.name = @0 AND s.name = schema_name() ORDER BY c.column_id', N'@0 nvarchar(128)', @0 = N'WB_FZI'
EXEC sp_executesql N'SELECT o.name AS [table_name], c.name AS [name], t.name AS [type], d.definition AS [default_value], CASE WHEN t.name IN (''decimal'', ''bigint'', ''int'', ''money'', ''numeric'', ''smallint'', ''smallmoney'', ''tinyint'') THEN c.scale END AS [numeric_scale], CASE WHEN t.name IN (''decimal'', ''bigint'', ''int'', ''money'', ''numeric'', ''smallint'', ''smallmoney'', ''tinyint'', ''real'', ''float'') THEN c.precision END AS [numeric_precision], CASE WHEN t.name IN (''date'', ''datetime'', ''datetime2'', ''datetimeoffset'', ''smalldatetime'', ''time'') THEN c.scale END AS [datetime_precision], c.collation_name AS [collation], ROW_NUMBER() OVER (ORDER BY c.column_id) AS [ordinal_position], CASE WHEN t.name IN (''nchar'', ''nvarchar'') AND c.max_length > 0 THEN c.max_length / 2 ELSE c.max_length END AS [length], CASE c.is_nullable WHEN 1 THEN 1 END AS [is_nullable], CASE WHEN ic.object_id IS NOT NULL THEN 1 END AS [is_primary], c.is_identity AS [is_identity] FROM .sys.columns c INNER JOIN .sys.objects o ON c.object_id = o.object_id INNER JOIN .sys.schemas s ON o.schema_id = s.schema_id INNER JOIN .sys.types t ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id LEFT OUTER JOIN .sys.default_constraints d ON c.object_id = d.parent_object_id AND c.default_object_id = d.object_id LEFT OUTER JOIN .sys.key_constraints k ON c.object_id = k.parent_object_id AND k.type = ''PK'' LEFT OUTER JOIN .sys.index_columns ic ON k.parent_object_id = ic.object_id AND k.unique_index_id = ic.index_id AND c.column_id = ic.column_id WHERE o.name = @0 AND s.name = schema_name() ORDER BY c.column_id', N'@0 nvarchar(128)', @0 = N'WB_FZI'
SELECT CAST('' AS char(2)) AS value
SELECT CAST('' AS char(2)) AS value
SELECT CAST('' AS char(1)) AS value
SELECT CAST('' AS char(1)) AS value
SELECT CAST('' AS varchar(10)) AS value
SELECT CAST('' AS varchar(10)) AS value
SELECT CAST('' AS varchar(6)) AS value
SELECT CAST('' AS varchar(6)) AS value
SELECT CAST('' AS char(12)) AS value
SELECT CAST('' AS char(12)) AS value
SELECT CAST('' AS char(3)) AS value
SELECT CAST('' AS char(3)) AS value
SELECT CAST((0) AS smallint) AS value
SELECT CAST((0) AS smallint) AS value
SELECT CAST((0) AS numeric(9,2)) AS value
SELECT CAST((0) AS numeric(9,2)) AS value
SELECT CAST('' AS char(12)) AS value
SELECT CAST('' AS char(12)) AS value
SELECT CAST('' AS char(8)) AS value
SELECT CAST('' AS char(8)) AS value
SELECT CAST('' AS char(2)) AS value
SELECT CAST('' AS char(2)) AS value
SELECT CAST('' AS varchar(12)) AS value
SELECT CAST('' AS varchar(12)) AS value
SELECT CAST('' AS varchar(8)) AS value
SELECT CAST('' AS varchar(8)) AS value
SELECT CAST('' AS varchar(10)) AS value
SELECT CAST('' AS varchar(10)) AS value
SELECT CAST('' AS varchar(4)) AS value
SELECT CAST('' AS varchar(4)) AS value
SELECT CAST('' AS char(2)) AS value
SELECT CAST('' AS char(2)) AS value
SELECT CAST('' AS varchar(10)) AS value
SELECT CAST('' AS varchar(10)) AS value
SELECT CAST('' AS varchar(8)) AS value
SELECT CAST('' AS varchar(8)) AS value
SELECT CAST((0) AS numeric(6,3)) AS value
SELECT CAST((0) AS numeric(6,3)) AS value
SELECT CAST((0) AS numeric(5,1)) AS value
SELECT CAST((0) AS numeric(5,1)) AS value
SELECT CAST('' AS char(5)) AS value
SELECT CAST('' AS char(5)) AS value
SELECT CAST('' AS varchar(18)) AS value
SELECT CAST('' AS varchar(18)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS char(5)) AS value
SELECT CAST('' AS char(5)) AS value
SELECT CAST('' AS varchar(18)) AS value
SELECT CAST('' AS varchar(18)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS char(3)) AS value
SELECT CAST('' AS char(3)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(24)) AS value
SELECT CAST('' AS varchar(24)) AS value
SELECT CAST('' AS varchar(14)) AS value
SELECT CAST('' AS varchar(14)) AS value
SELECT CAST('' AS varchar(14)) AS value
SELECT CAST('' AS varchar(14)) AS value
SELECT CAST('' AS varchar(14)) AS value
SELECT CAST('' AS varchar(14)) AS value
SELECT CAST('' AS char(7)) AS value
SELECT CAST('' AS char(7)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS char(7)) AS value
SELECT CAST('' AS char(7)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS char(7)) AS value
SELECT CAST('' AS char(7)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('00000' AS char(5)) AS value
SELECT CAST('00000' AS char(5)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(16)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT CAST('' AS varchar(40)) AS value
SELECT COUNT(*) FROM (SELECT 1 AS one FROM [WB_FZI]) subquery_for_count
SELECT COUNT(*) FROM (SELECT 1 AS one FROM [WB_FZI]) subquery_for_count
=> 2174

from activerecord-sqlserver-adapter.

no1-knows avatar no1-knows commented on May 29, 2024

DB column was wrong which rails don't create.
Thanks for your support!!!

from activerecord-sqlserver-adapter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.