簡體   English   中英

SQL Server 2000:奇怪的錯誤:無法將VARCHAR轉換為INT

[英]SQL Server 2000: weird error: cannot convert VARCHAR to INT

我在奇怪的情況下發生了一個奇怪的錯誤。

當並且僅當它們不存在時,我在光標curLongSkills收到的技能名稱列表才會插入到表tbl_new_skill_overview 因此,我像往常一樣遍歷游標,並在插入之前檢查它是否已經存在。

奇怪的是,我收到錯誤Syntax error converting the varchar value 'Some Random Skill' to a column of data type int. SELECT @iCount = COUNT(ID)

但是,如果刪除該語句中的WHERE子句,則不會發生這種情況。 因此,如果我評論或刪除WHERE Name = @sSkillName ,則不會給出錯誤。 @iCount是因為我在同一查詢的WHERE子句中使用@sSkillName一樣,我將@sSkillName分配給@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;

我從不喜歡游標-但作為一種輕松的選擇,您應該能夠在沒有游標的情況下完成所需的操作。

insert into tbl_new_skill_overview
select //columnNames
from tbl_new_skill
WHERE Profile = 'long'
AND Parent_ID IS NULL
and name not in
(select name from tbl_new_skill)

問題是愚蠢。

tbl_new_skill_overviewName列被錯誤地輸入為INT而不是VARCHAR

感謝所有回答,特別是鮑勃要求我展示數據庫結構,這時我意識到了錯誤。

這肯定是奇怪的事情。 我不知道是什么原因造成的,但是要解決它,也許您可​​以執行以下操作:

if not exists (select * from tbl_new_skill_overview where Name = @sSkillName) begin
    print @sSkillName;
    -- TODO: Insert skill
end

假設您以后不使用@iCount。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM