【问题标题】:Stored procedure - Error converting data type varchar to numeric存储过程 - 将数据类型 varchar 转换为数值时出错
【发布时间】:2023-03-04 10:33:01
【问题描述】:

在运行一个简单的存储过程时,我遇到了这个错误,坦率地说我不知道​​为什么。

消息 8114,级别 16,状态 5,过程 PROC_TEST,第 15 行
将数据类型 varchar 转换为数值时出错。

列:

  • SI_IDNUMERIC(19,0)
  • SI_COMPANYIDNUMERIC(19,0)
  • SI_LOGINIDVARCHAR(100)

知道为什么吗?

这是存储过程:

CREATE PROCEDURE [xxxxxx].[PROC_TEST] 
AS
BEGIN    
    SET NOCOUNT ON

    DECLARE
          @id NUMERIC(19,0),
          @login VARCHAR(100);

    DECLARE user_cursor CURSOR       <<----- Line 15
    FOR
       SELECT 
           SI_ID, SI_LOGINID 
       FROM SI_USER 
       WHERE SI_COMPANYID = 123

    OPEN user_cursor

    FETCH NEXT FROM user_cursor into @id, @login

    WHILE @@FETCH_STATUS = 0 
    BEGIN
          PRINT @id + ', ' + @login

          FETCH NEXT FROM user_cursor into @id, @login
    END

    CLOSE user_cursor
    DEALLOCATE user_cursor
END

【问题讨论】:

  • SI_COMPANYID 的列类型是什么?
  • @Parado SI_COMPANYID 是 NUMERIC(19,0)

标签: sql sql-server stored-procedures sql-server-2008-r2


【解决方案1】:

SQL 错误行引用不准确。 错误似乎是这一行:PRINT @id + ', ' + @login

试试PRINT CONVERT(varchar, @id) + ', ' + @login

【讨论】:

  • 非常感谢,确实是问题所在。不敢相信我已经在这样一件愚蠢的事情上浪费了几个小时,只是因为微软无法提供准确的错误信息。无论如何谢谢;)
  • @Parado,别担心,我总是接受答案。只需要再等3分钟接受(现在不能接受,系统阻止接受太快)
猜你喜欢
  • 1970-01-01
  • 2014-10-04
  • 2016-06-22
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2021-10-02
相关资源
最近更新 更多