pypyodbc icon indicating copy to clipboard operation
pypyodbc copied to clipboard

pypyodbc.Error: ('HY104', '[HY104] [Microsoft][ODBC SQL Server Driver]Invalid scale value')

Open serak opened this issue 5 years ago • 2 comments

it works fine but when it reached this value it throws the above error Invalid scale value') ('EMP3600477', '3600477', None, None, datetime.date(1970, 1, 1), datetime.date(1970, 1, 1), 'TRF', '002', Decimal('0.000000'), '001', None, None, datetime.date(2020, 1, 1), None, None)_

Commend on insert

cursor.execute("INSERT INTO [dbo].[PTTB_EMPLOYMENTDETAILS] VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",('EMP3600477', '3600477', None, None, datetime.date(1970, 1, 1), datetime.date(1970, 1, 1), 'TRF', '002', Decimal('0.000000'), '001', None, None, datetime.date(2020, 1, 1), None, None))

full error log

_Traceback (most recent call last): File "c:/Users/Serak/Desktop/CRM STAGING TABLE/DemographicMigration.py", line 79, in sql_cursor.execute("INSERT INTO [dbo].[PTTB_EMPLOYMENTDETAILS] VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",dict_pttb_employmentdetails) File "C:\Users\Serak\AppData\Local\Programs\Python\Python36\lib\site-packages\pypyodbc.py", line 1494, in execute self._BindParams(param_types) File "C:\Users\Serak\AppData\Local\Programs\Python\Python36\lib\site-packages\pypyodbc.py", line 1454, in BindParams check_success(self, ret) File "C:\Users\Serak\AppData\Local\Programs\Python\Python36\lib\site-packages\pypyodbc.py", line 1007, in check_success ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi) File "C:\Users\Serak\AppData\Local\Programs\Python\Python36\lib\site-packages\pypyodbc.py", line 985, in ctrl_err raise Error(state,err_text) pypyodbc.Error: ('HY104', '[HY104] [Microsoft][ODBC SQL Server Driver]Invalid scale value')

table structure

CREATE TABLE [dbo].[PTTB_EMPLOYMENTDETAILS](
	[PTEMPLOYMENTIDPK] [varchar](20) NOT NULL,
	[PTINTERNALPARTYID] [varchar](30) NOT NULL,
	[PTJOBTITLE] [varchar](50) NULL,
	[PTNAMEOFEMPLOYER] [varchar](256) NULL,
	[PTSTARTDT] [date] NULL,
	[PTENDDT] [date] NULL,
	[PTPAYMENTMETHOD] [varchar](50) NULL,
	[PTPAYMENTFREQUENCY] [varchar](50) NULL,
	[PTGROSSANNUALSALARY] [decimal](24, 6) NULL,
	[PTEMPLOYMENTTYPE] [varchar](50) NULL,
	[PTTYPEOFBUSINESS] [varchar](50) NULL,
	[PTEMPLOYEEID] [varchar](50) NULL,
	[PTCONTRACTENDDT] [date] NULL,
	[PTEMPLOYERSTELEPHONE] [varchar](20) NULL,
	[PTEMPLOYERPARTYID] [varchar](30) NULL,
 CONSTRAINT [PK__PTTB_EMP__DFB9CA518EB466F8] PRIMARY KEY CLUSTERED 
(
	[PTEMPLOYMENTIDPK] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

serak avatar Apr 03 '19 17:04 serak

I think that your ODBC does not understand your "DECIMAL" value... try to not pass that value or pass it as string on the sql string and not as a parameter, probably it is that. if you do a google search with:

'HY104', '[HY104] [Microsoft][ODBC SQL Server Driver]Invalid scale value'

you will probably find more useful info on this mather.

Good luck!

braian87b avatar Apr 03 '19 18:04 braian87b

well that's not an option when you are creating an ETL tool i extract data row by row from Db2 and push it to SQL Server. i which i might require iterating thought a tuple change to a tuple again and push which is very expensive, i tried changing the odbc drivers to latest version but still nothing its not with the odbc because the same code works with pyodbc the problem is when i am importing pypyodbc as pyodbc

serak avatar Apr 04 '19 08:04 serak