存储过程的字段名用变量代替,不是用'@变量名'么?
select * FROM DisciplineInfo WHERE @fild=@valu;
和 select * FROM DisciplineInfo WHERE '+@fild+'=@valu;
这两个都不好使,怎么回事啊

解决方案 »

  1.   

    字段名用变量需要动态执行。
    exec('select * from tb where '+@fild+'='+@value)
      

  2.   

    按照你的方法试了,代码是这样的
    ALTER proc [dbo].[DisciplineInfo1] @zx varchar(6),@fild varchar(20)=null,@valu varchar(40)=null
    as
    if @zx='selid'
    exec('select * from DisciplineInfo where '+@fild+'='+@valu)
    调用的时候用
    execute DisciplineInfo1 "selid","Id","y89312"
    显示列名无效,是怎么回事?
      

  3.   

    exec sp_executesql 
        N'select * FROM DisciplineInfo WHERE @fild=@valu;'
        ,N'@fild nvarchar(100),@valu nvarchar(50)'
        ,@fild
        ,@valu;
      

  4.   

    这个用法不是动态执行,而且存在注入风险;执行动态sql使用系统sp:SP_EXECUTESQL
    详情参见:
    http://msdn.microsoft.com/zh-cn/library/ms188001.aspx
      

  5.   

    select * FROM DisciplineInfo WHERE fild=@valu;由以上看出 你的fild字段应该是字符类型
      

  6.   

    set @sql='select top '+str(@field)+' '+@key+' from '+@table+@orderbyexec(@sql)
      

  7.   

    为什么字段名要用变量代替呢,直接使用组合条件不是更好?
    create table #t(id int, name varchar(10));insert into #t
      select 1, 'zhangsan' union all
      select 2, NULLdeclare @field varchar(10)
      set @field = 'id'
    declare @value int
      set @value = 1
    declare @execSql varchar(500)
     set @execSql = ' select * from #t where {0} = ''{1}'' '
    set @execSql = Replace(@execSql, '{0}', @field)
    set @execSql = Replace(@execSql, '{1}', @value) SELECT @execSql
     
    EXEC(@execSql)drop table #t
    go
    还是不理解你为什么要使用动态字段名……
      

  8.   

    我在前台执有很多查询,所以我想在前台直接传字段名和值,然后想用一个查询条件执行这些查询,按照microtry的方法做了, 查询不出来数据,是不是我的还是哪有问题,那个网页我一直也刷不出来,
      

  9.   

    现在可以调用了,但是我的字段的值只能是数字,在查询的时候 比如
    execute DisciplineInfo1 "selid","DisciplineName","农学"
    查询字段的值一有字母或汉字就显示 在将 varchar 值 '农学' 转换成数据类型 int 时失败。
    如果把表内“农学”改成数字的话就可以正常显示。这是什么原因啊
      

  10.   


    给你正确答案你不用,就连相关的MSDN文章也无法给你了,
    非要用那些错误的答案