【发布时间】:2011-03-08 16:28:54
【问题描述】:
我在奇怪的情况下发生了一个奇怪的错误。
当且仅当它们不存在时,我在光标curLongSkills 中收到的技能名称列表将被插入到表tbl_new_skill_overview 中。所以我像往常一样循环遍历光标,并在插入之前检查它是否已经存在。
奇怪的是,我在SELECT @iCount = COUNT(ID) 行收到错误Syntax error converting the varchar value 'Some Random Skill' to a column of data type int.。
但是,如果我删除了该语句中的 WHERE 子句,不会发生这种情况。所以如果我评论或删除WHERE Name = @sSkillName,它不会给出错误。就好像它认为我将@sSkillName 分配给@iCount 只是因为我在同一查询的WHERE 子句中使用了@sSkillName。
只要我能判断该技能是否已经插入tbl_new_skill_overview,其他方式就足够了。我不一定要这样做。
我也尝试了以下方法,但给出了相同的错误:
SET @iCount = (
SELECT COUNT(ID) AS Line_Count
FROM tbl_new_skill_overview
WHERE Name = @sSkillName
);
服务器正在运行 Microsoft SQL Server 2000(我知道,我知道...)。
以下是整个 SQL 脚本。
DECLARE @sSkillName VARCHAR(200);
DECLARE @iCount INT;
DECLARE curLongSkills CURSOR FOR (
SELECT DISTINCT Name
FROM tbl_new_skill
WHERE Profile = 'long'
AND Parent_ID IS NULL
)
OPEN curLongSkills;
FETCH curLongSkills INTO @sSkillName;
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @iCount = COUNT(ID)
FROM tbl_new_skill_overview
WHERE Name = @sSkillName; -- No error if this line removed.
IF @iCount = 0 BEGIN
PRINT @sSkillName;
-- TODO: Insert skill
END;
FETCH curLongSkills INTO @sSkillName;
END;
CLOSE curLongSkills;
DEALLOCATE curLongSkills;
【问题讨论】:
-
很奇怪。你试过
set @iCount = (select ...吗? -
@Blorgbeard:是的,我已经相应地更新了问题,谢谢。
-
你能发布 tbl_new_skill 和 tbl_new_skill_overview 的结构吗?
-
@bobs:天哪,我有时很愚蠢。 “名称”列错误地是 INT,而不是 VARCHAR。
-
我想知道这一点。而且,你并不比我们其他人聪明,这很好。否则,我们不需要这个网站。 :)
标签: sql tsql sql-server-2000