弄了一上午也没弄好 急死了 请各位朋友帮忙 语句其实很简单
想编一个多条件查询的sql存储过程代码如下  本来想做个如果传入值为空就不查询,结果一直报错。后来吧语句都注释了就剩最下面那三句话 可还是出错 起大家帮我看看 我的字符串连接哪里错了
错误一直提示 列名xx无效
在线等回复 数据库sql2000ALTER PROCEDURE userselect_stock 
/*
按商品名、商品分类、供应商姓名查询库存
*/@s_class varchar(30) ,
@s_gname varchar(40) ,
@s_sname char(100) AS--if @s_class != null
--if @s_gname != null
--set @strwhere = @strwhere + ' and s_gname = ' + @s_gname
--if @s_gname != null
--set @strwhere = @strwhere + ' and s_sname = ' + @s_sname
--select s_id,s_class,s_gname,s_sname,s_dnum,s_pprice,s_sprice
--from stock where s_class = @s_class

declare @strwhere varchar(100)
declare @strmain char(600)
set @strwhere =' s_gname ='+@s_gname 
set @strmain = 'select s_id,s_class,s_gname,s_sname,s_dnum,s_pprice,s_sprice from stock where'+@strwhere 
exec(@strmain)下面是我在查询分析器中输入的
exec userselect_stock '家电','洗衣机','海尔'

解决方案 »

  1.   

    declare @strwhere varchar(100)
    declare @strmain char(600)
    set @strwhere =' s_gname ='''+@s_gname+'''' 
    set @strmain = 'select s_id,s_class,s_gname,s_sname,s_dnum,s_pprice,s_sprice from stock where'+@strwhere  
    exec(@strmain)
      

  2.   

    declare @strwhere varchar(100)
    declare @strmain char(600)
    set @strwhere =' s_gname ='+@s_gname 
    set @strmain = 'select s_id,s_class,s_gname,s_sname,s_dnum,s_pprice,s_sprice from stock where'+@strwhere 
    exec(@strmain)这段写成declare @strwhere varchar(100)
    declare @strmain char(600)
    set @strwhere =' s_gname ='''+@s_gname+'''' 
    set @strmain = 'select s_id,s_class,s_gname,s_sname,s_dnum,s_pprice,s_sprice from stock where'+@strwhere 
    exec(@strmain)动态SQL文结合的时候不会根据你变量类型自动进行类型变换的值两边加上引号
      

  3.   

    列名无效,肯定是这一句了
    set @strmain = 'select s_id,s_class,s_gname,s_sname,s_dnum,s_pprice,s_sprice from stock where'+@strwhere
    看下你是不是用错数据库了,或者你的stock表里没有这句里面的某一列
      

  4.   

    select ''''
    /*
    ----
    '
    */
      

  5.   

    print出来的结果是这样:select s_id,s_class,s_gname,s_sname,s_dnum,s_pprice,s_sprice from stock where s_gname =洗衣机  它把洗衣机当成列名了,当然是不存在了,所以要加引号