我需要从一个表中获取数据并使用关系将其放入另一个表中。长话短说,我需要找回一系列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
答案 0 :(得分:0)
我不熟悉MS SQL(几乎完全在MySQL中体验过),但我猜想@CharIDList + @Id + @delimiter
导致错误;由于@Id
被定义为int
,MS SQL可能也试图将其他操作数强制转换为int值(用于添加而不是连接)。