在没有预期的int时,获取创建SQL函数的错误(无法转换为int)

时间:2015-05-21 16:23:21

标签: mysql sql-server

我需要从一个表中获取数据并使用关系将其放入另一个表中。长话短说,我需要找回一系列ID,所以我创建了一个函数来返回它们。我只检索ID为所有int值的数据。问题是当我调用我的函数时,我收到错误: 转换varchar值时转换失败' /'数据类型为int。

但是所有内容都被转换为varchar所以我不知道为什么会这样。我知道它的脏代码,但它是一个高优先级的项目,截止日期紧,所以我只需要它工作。我正在使用SQL Server 2012.有什么想法吗?

功能:

CREATE FUNCTION FactPersonList (@FactID varchar(100),
@delimiter char(1))

RETURNS varchar(8000)
AS
BEGIN
  DECLARE @CharIDList varchar(8000)
  DECLARE @id int
  DECLARE @FinalTable TABLE (
    factid int,
    charid int
  )

  SET @CharIDList = CHAR(08) + @delimiter

  INSERT INTO @FinalTable
    SELECT DISTINCT
      @FactID,
      CharacterId
    FROM KeyFactsCharacters
    WHERE KeyFactID = @FactID

  WHILE ((SELECT
      COUNT(*)
    FROM @FinalTable)
    > 0)
  BEGIN

    SET @Id = (SELECT TOP 1
      charid
    FROM @FinalTable)

    SET @CharIDList = CAST(@CharIDList + @Id + @delimiter AS varchar(8000))

  END

  SET @CharIDList = CAST(@CharIDList + CHAR(08) + '~' AS varchar(8000))

  RETURN CAST(@CharIDList AS varchar(8000))
END

我使用它调用它:

SELECT dbo.FactPersonList(KeyFact.KeyFactId, '/') FROM KeyFactsCharacters, KeyFact

1 个答案:

答案 0 :(得分:0)

我不熟悉MS SQL(几乎完全在MySQL中体验过),但我猜想@CharIDList + @Id + @delimiter导致错误;由于@Id被定义为int,MS SQL可能也试图将其他操作数强制转换为int值(用于添加而不是连接)。