有一个sql语句,用到变量bm(int)。我想查出以他开头的,其后有两个字节的所有记录。
比如有一个表
id         name
10         luck
1001       good
sql语句:
bm:=10;
select max(id) from student where id like bm+'__'
在查询分析器中单独运行没错误,但在存储过程中有错,
还有如果用TADOquery.sql; like后面怎么写。
到底怎么样处理sql中单引号和字符串的单引号。
1:在查询分析器中应怎么写。
2:在delphi的TADOquery.sql中应如何写。

解决方案 »

  1.   

    1.在查询分析器中试首用convert(目标类型,值)函数转换id字段值,然后再like看看。
    2.如果在查询分析器中测试成功了,把SQL语句搬到TADOQuery.SQL中就OK了,注意单引号。
    3.Delphi中单引号 '即是单引号,也是转义字符,要表示SQL里的单引号可用''两个单引号来表示。
    比如:ADOQuery1.SQL.Add('update users set passwd='''+password+''' where useID='''+useid+'''');msn:[email protected]
      

  2.   

    1:  set @bm='10%'
    select * from studentwhere id  like  @bm
    2:
    bm:='10'+'%'
    'select * from student where id like '+''''+bm
      

  3.   

    sorry
    :
    if id is not char then
    :转换一下就可能   cast ,convent
      

  4.   

    id 是 VARCHAR
    在查询分析器中,DECLARE @bm AS Integer
    -- 下面是赋值,在Delphi中直接传递即可
    -- Set @bm = 10  
    Select MAX(id) From student Where id like  CONVERT(VARCHAR(10),@bm) + '%'
      

  5.   


    在TADOquery.sql中如果有变量,那如何写呢
    to: gechaosa(潮)
    'select * from student where id like '+''''+bm中 为什么还要加''''呢
      

  6.   

    use pubs
    create table test3
    (
      id int,
      name varchar(16),)
    insert into test3(id,name) values(10,'luck')
    insert into test3(id,name) values(1001,'good')
    insert into test3(id,name) values(1101,'good')
    insert into test3(id,name) values(10001,'good')
    declare @S varchar(16)
    set @S='10%'
    select * from test3 
    where (len(cast(id as varchar))=4) and (cast(id as varchar) like  @S)
    ---------------------
      //假设Name是VarChar类型  ,下面三种是等价的
      //相当于 SQL里面的 select * from test where Name='11111'
      Edit1.Text:='11111';
      ADOQuery1.sql.Add('select * from test where Name='+QuotedStr(Edit1.Text));
      ADOQuery1.sql.Add('select * from test where Name='+''''+Edit1.Text+'''');
      ADOQuery1.sql.Add('select * from test where Name='''+Edit1.Text+'''');  //假设Num是数字类型  ,或时间
      ADOQuery1.sql.Add('select * from test where Num='+Edit1.Text);