CREATE        PROCEDURE  find
@tablename char(20),/查询的表名
@truename char(20) /查询的条件 AS
 set nocount on
begin
     declare @sql as varchar(200)
     set @sql=' select * from '+@tablename +'where  truename='+cast( @truename as char(20))
     print @sql
     EXEC(@sql)
end
GO
这个过程执行时如果表中是数字就没问题,如果是字符就出错,要怎么处理,好像是如果能给条件加上单引号就行了,但不知如何加,或者有没有其它办法?谢谢!! 比如需要查询的列的内容为:
10
20
50
B
A
30
20
查到数字是没问题,一查到字母就报错,表中该字段是CHAR(20)类型

解决方案 »

  1.   

    set @sql=' select * from '+@tablename +'where truename='+cast( @truename as char(20))
    ====
    set @sql=' select * from '+@tablename +'where truename='''+cast( @truename as char(20))+'''
      

  2.   

    你自己调整下,错误原因就是char为字符型,需要加上单引号。
    数字没有报错是因为隐式转换了。
      

  3.   

    set @sql=' select * from '+@tablename +'where truename='+cast( @truename as char(20))
    ====
    set @sql=' select * from '+@tablename +'where truename='''+cast( @truename as char(20))+''''
    这样就可以了