我有奇怪的情況下發生的奇怪的錯誤。SQL Server 2000:奇怪的錯誤:無法將VARCHAR轉換爲INT
我在光標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 2011-03-08 16:32:21
@Blorgbeard:是的,我已經更新了相應的問題,謝謝 – Teekin 2011-03-08 16:38:45
你可以發佈tbl_new_skill和tbl_new_skill_overview的結構嗎? – bobs 2011-03-08 16:38:55