碰到過這個問題:當時的程序大致如下:
create procedure myproc @tablename varchar(20), @idnum int
as
declare @sqlstr varchar(200)
set @sqlstr='select * from '+@tablename+' where id='+@idnum
execute (@sqlstr)
Go
在執行上述存儲過程的時候(execute myproc 'test',2),系統報告"varchar轉換為int類型時錯誤"。
錯誤的原因在於set @sqlstr='select * from '+@tablename+' where id='+@idnum這一行。
改正的方法可以有幾種:
1:直接將@idnum 定義為varchar類型的數據即可
2:在存儲過程中加入一個@varchar 類型的變量,先將@idnum賦值給它,在用其代替@idnum即可。即:
create procedure myproc @tablename varchar(20), @idnum int
as
declare @sqlstr varchar(200)
declare @tempstr varchar(10)
set @tempstr=@idnum
set @sqlstr='select * from '+@tablename+' where id='+@itempstr
execute (@sqlstr)
Go
由此可見發生錯誤的原因可能在於生成@sqlstr時,出現varchar與int(numeric)類型的操作時(注意varchar在前),系統會嘗試將varchar轉換為int(或numeric),因而出現錯誤。