Bad Command or file name

解决方案 »

  1.   

    我还不知道在后台可以这样写 proc
      

  2.   

    朋友:你好
    你这段程序确实有错.
    1.  id<>null不对,应该为 id is not null
    2.  执行时参数代入格式不对,参数是条件 + 字符型值时,不能写成 "kfdh='1213123'",但可以写成"kfdh=1213123",系统会自动将1213123认为为字符型.
    3. 执行动态SQL语句时格式不对, 应加括号,即 exec (@strpara)
    4. 注意点(不是错误), 用户自定义存储过程的名称不要使用 sp_开头,sp_开头的存储过程为系统存储过程.以上程序修改如下:
    CREATE PROCEDURE hgp_select
    @strpara varchar(50)
    AS 
    set @strpara="select * from HGP where id is not null and " + @strpara
    exec (@strpara)exec hgp_select "kfdh=1213123" 
      

  3.   

    guoyiqian,谢谢指点.
    但问题该没彻底解决,
    如果@strpara包含多个条件,
    如:"col1=11212 and col2=112",
    则无法正确执行,还请帮忙看看,多谢!
      

  4.   

    withhold:你好!
      如果@strpara包含多个条件且条件个数不知的情况下,可以有二种方法解决该问题.
    方法一:通过DB-Library编程,动态生成存储过程.我以前在SYBASE数据库下使用过,但该方法要有C编程经验,同时要熟悉DB-Library,比较难使用.我建议你使用方法二.方法二:我猜想你应该是前台使用种数据库开发工具(PB,VB或其它),后台使用SQL SERVER数据库.
    而多条件是由前台决定的. 若是这种类型,则:
    第一步,你可以在后台建立一个专门存放条件的表.表结构为
    CREATE TABLE dbo.cond
                 (condition varchar(2000) NOT NULL,
                  iden_id int IDENTITY NOT NULL  --系统流水号,读写数据时不要理会该字段
           , CONSTRAINT cond_p
            PRIMARY KEY  NONCLUSTERED
           (iden_id)) ;
    前台决定好的条件先在前台动态拼接好,如 where col1='abc' and col2='efg' and id=50,将拼接好的条件存放到条件表中 .
    第二步,建立存储过程
    CREATE PROCEDURE hgp_select
    AS 
    declare @strsql varchar(2000), @condition varchar(2000)
    select @condition = condition from cond
    set @strsql="select * from HGP " + @condition
    exec (@strsql)调用该存储过程:  exec hgp_select细节注意点:1. 应考虑系统是多用户的,该程序必须允许多个人同时选择不同条件,同时得到各自的所需数据,所以在条件表最好再加上一个操作员(注:不同人执行该程序,应该为不同的操作人员),这样可以区分条件是谁的.在存储过程中,同样要有操作人员.
     2. 在存储过程中拼接条件时,即做select @condition = condition from cond
                               set @strsql="select * from HGP " + @condition动作时,应该判断条件表中是否取到了条件.因为 变量 + Null = Null很高兴我们能相互探讨问题.有空联系