![](/img/trans.png)
[英]Cannot convert varchar value to int in stored procedure in SQL Server
[英]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_overview
的Name
列被錯誤地輸入為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.