修复将数据类型 varchar 转换为数字的错误。 (8114) (SQLExecDirectW)')

Fix Error converting data type varchar to numeric. (8114) (SQLExecDirectW)')

我正在尝试 运行 使用 pyodbc 的以下存储过程。

USE [CompanyMC]
GO
/****** Object:  StoredProcedure [dbo].[marketprice]    Script Date: 15/10/2019 23:02:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[marketprice](@marketvalue AS VARCHAR(30))
  AS
  BEGIN
  SELECT TRY_CAST (CompanyMarketCap AS numeric) from CompanyMC.dbo.Companies
  where CompanyName= @marketvalue
  END

这是我的 python 代码

    # Call the procedure and pass rhe arguments as a list
    sql=f"""\
        EXEC {proc_name} @marketvalue=?;
        """
    parameters = (company_name)
    cursor.execute(sql, parameters)

    # get the result set and iterate over it to get the returned value
    result = cursor.fetchval()

我一直运行宁入错误。

('42000', '[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Error converting data type varchar to numeric. (8114) (SQLExecDirectW)')

似乎无法弄清楚哪里做错了任何提示将不胜感激。

确保您的 varchar 中存储了合法的数字字符串(例如,NOT "xyz" 和 NOT 无效的)。然后尝试 CONVERT():

SELECT CONVERT(numeric, CompanyMarketCap) FROM CompanyMC.dbo.Companies WHERE CompanyName= @marketvalue

如果 NULL 是可能的,则在您的语句中添加 COALSCE()