select @fie from 
这句有问题

解决方案 »

  1.   

    什么问题,请指明!
    如果不用@fie参数,如何使select后的字段名是动态的?
      

  2.   

    你把IFELSE。END去掉
    看一下QUERY3里面是否有记录?
    如有是不是你想要的记录?
    是否有你用FILE参数传递的字段的名字?
      

  3.   

    CREATE PROCEDURE [chazhao] @ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) AS 
    select fie from scrb 
    where ddbh=@ddbh and ys=@ys and zb=@zb and sb=@sb 
    order by lrq
      

  4.   

    字段不能作为参数传递你可以这么做:CREATE PROCEDURE [chazhao] @fie varchar(50),@ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) 
    AS 
    declare @str
    select @str='select '+@fie+' from scrb 
    where ddbh=@ddbh and ys='''+@ys+''' and zb='''+@zb+''' and sb='''+@sb +''' order by lrq '
    exec (@str)
    go
      

  5.   

    为啥要动态,TABLE的字段是死的,
    判断一下不就行了
      

  6.   

    if @fie='a'
      select a form 
    if @fie='b'
      select b form 
    .
    .
    .
    ...
      

  7.   

    我用我原来的程序,执行后是有记录,但记录不是我所要的!
    举个例子:
      我将参数fie用常数'dl'来传递,程序执行完后,query3的字段名不是'dl'
    而是它的记录值是'dl'。
    china_lyz(彦召软件工作室):
      如你后面所列出的存储过程在delphi中执行好象通不过,因为我要查找的字段名不只是fie字段,而我是要将fie做成是动态的,可以根据参数来改变!还请各位多多指点!
      

  8.   

    或者
    直接用 
    SELECT * fromdelphi程序不变
      

  9.   

    可以将fie作成动态的,但不是在存贮过程中,而应在客户端处理.
      

  10.   

    你那种SQL的过程是不支持动态的表的,要象前面”飞飞“那样才可以。
      

  11.   

    那么DDBH,YS,SB的字段名也是你传递的字段的记录的值,不是你传递的字段名了?并且QUERY3的第一条记录与字段名是相同的了?你试下告诉我
      

  12.   

    fredfei(飞飞) :
      我用了你的方法后,在程序中调用时,出现如下错误:
      unclosed quotation  before the character string''
    还请继续指点!
      对了,我还在你的过程语句中修改如下:
      1、在@str后加 varchar950;
      2、将go去掉;
      不好意思,不修改,语法有错!china_lyz(彦召软件工作室) :
      DDBH,YS,SB是我用到的字段名,但它们是用在where语句中,是可以通过的!
      没错!query3的第一条记录与字段名是相同的!
      

  13.   

    你改一下你的QUERY3的显示标题就可以了问题就搞定了给分吧呵呵
    我以前也遇到过这样的问题
      

  14.   

    你改一下你的QUERY3的显示标题就可以了问题就搞定了给分吧呵呵
    我以前也遇到过这样的问题
      

  15.   


    SELECT * from 
    把所有字段都选出来
    然后在前台控制,难道不行
      

  16.   

    china_lyz(彦召软件工作室) :
      不好意思,我还没理解你的意思,你说改变QUERY3的显示标题是啥意思?
    请解释!
    我的问题若解决了,一定给你加分!
      

  17.   


    不好意思,漏了一个CREATE PROCEDURE [chazhao] @fie varchar(50),@ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) 
    AS 
    declare @str 
    select @str='select '+@fie+' from scrb 
    where ddbh='''+@ddbh+''' and ys='''+@ys+''' and zb='''+@zb+''' and sb='''+@sb +''' order by lrq ' 
    exec (@str) 
    go 
      

  18.   

    你用过没有query的字段如
      select * from scrb
    你把query的active=true
    双击query把query的字段名全部加入到query里面
    这时你可以设置字段的显示名称和颜色、大小等
    把你需要的字段加就去就可以了你可以动态的实现你的问题,不过要多用query了
    如果还没有明白,那我就不要分了
      

  19.   

    又漏了
    DECLARE @STR(4000)
      

  20.   

    完整的应该是:CREATE PROCEDURE [chazhao] @fie varchar(50),@ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) 
    AS 
    declare @STR VARCHAR(4000)select @str='select '+@fie+' from scrb 
    where ddbh='''+@ddbh+''' and ys='''+@ys+''' and zb='''+@zb+''' and sb='''+@sb +''' order by lrq ' 
    exec (@str) 
    go 有点迷糊:),
      

  21.   

    用这样的方法try:
    将@fie设为:OUTPUT的参数,在DELPHI中调用传递参数时也声明参数为OUTPUT的,这样就可以得到参数的返回结果了。CREATE PROCEDURE [chazhao] @fie varchar(50) OUTPUT,@ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) AS 
    select @fie from scrb 
    where ddbh=@ddbh and ys=@ys and zb=@zb and sb=@sb 
    order by lrq sql.add('Exec chazhao @fie='''+fie+''' OUTPUT,@ddbh='''+trim(combobox1.Text)+''',@ys='''+trim(combobox8.Text)+''',@zb='''+trim(combobox9.Text)+''',@sb='''+trim(combobox6.Text)+''' '); zd:=fie;
      

  22.   

    fredfei(飞飞) 的可能正确
    用Exec()来执行动态SQL语句
      

  23.   

    在Sql Server 2000 中不能直接使用动态表名,据说Sybase 12 能够处理动态表名;
    飞飞那样处理还不如在query里处理。
      

  24.   

    china_lyz(彦召软件工作室) :
      我理解你的意思,你的方法是处理数据时都在客户端处理,而我的想法是要调用存储过程让服务器去处理数据!
    不过,非常感谢你的支持!amature(啊来):
      先谢了!我在这个问题上不是输不出数据,而是输出的数据不正确,因为调用存储过程时,赋予字段参数不对,所以执行结果不对!fredfei(飞飞) :
      真的非常感谢你!在你的帮助下,我的存储过程调用成功了!
        不过,在存储过程的最后,我不是用go,而是用return,因为用go时
    在检测语法时会提示语法错误!
      

  25.   

    if object_id('dbo.tt')is not null
    drop procedure dbo.tt
    go
    CREATE  PROCEDURE  tt 
    (@fie  varchar(50) output,
    @ddbh  varchar(50) output)
    AS   
    declare @str  VARCHAR(4000)
     
    select  @str='select  '+@fie+'  from  初一   
     where  姓名='''+@ddbh+''' 'exec(@str)
    print @fie
    print @ddbh
    print @str
    go
    exec tt 数学,帝国