zoukankan      html  css  js  c++  java
  • 关于sql 拼接字符串的问题

    在使用sql语句的时候,我们经常会遇到使用字符串变量的时候,比如说,查询,str:='select *  from Table where Name='''+Name+'''';在.net里面使用sqlparameter,就不需要自己手动转换了,但是在做动态拼接sql时,总是或多或少的出现问题,今天就来说说单引号拼接的问题。

    下面部分案例引用园子里的其他人的,在这里说一声谢谢,最后我接着写了下自己的总结。

    就像上面写那句一样,我要想把name的值传到sql语句中间,还要带上单引号,形如str:='select *  from Table where Name='JueJiang‘',就要考虑delphi中单引号的用法了。

    首先,单引号必须是成对的,运行之后可能会出现’123''之类的情况,但是编译期写成str := '123''肯定是不行的。

    第二,单引号的意义,成对的单引号,是标准的字符串赋值格式。在成对单引号之间的单引号,每两个相当于一个转换之后的单引号字符。还是举个例子说明一下吧。

    复制代码
        str := '''';
        str1 := '123''';
        str2 := '123'+'';
    
    
    -------------------------------------
      显示结果:
    str:' str1:123' str2:123
    复制代码

    去掉指定字符串格式的两个单引号,中间的部分,两个单引号代表一个'字符,加号运算符的效果相当于去掉中间的两个单引号。

    使用变量也是一样:

    复制代码
        str3 := '123'+Name;
        str4 := '123'''+Name;
        str5 := '123'''+Name+'';
        str6 := '123'''+Name+'''';
    
    -------------------------------------
    显示结果:
        str3:123456
        str4:123'456 
        str5:123'456
        str6:123'456'
    复制代码

    通常sql语句中的拼接用的都是最后的一种情况。

    补充一下,双引号,在delphi没有什么特殊的含义,就是普通的字符

      str7 := '"123"';
    
    -------------------------------------
    显示结果:
      str7:"123"

    最后,还有sql语句的换行,换行就相当于是两个字符串的拼接了,需要使用加号连接起来。

      str:='select *  from Table '+
            'where Name='''+Name+'''';

    总结如下:所谓单引号、双引号、三引号、四引号的都说的太多,或者他们对此了解的太少,没能弄懂其中的道理,就已‘三引号’、‘四引号’来看问题,反而将问题复杂化了。

    通过我对上面案例的分析,以及该园子作者的说明,我们很容易理解一个道理:sql的动态拼接只有单引号,没有什么‘三引号’、‘四引号’之说,其中‘双引号’有两种解释

    一个是shift+双引号键,产生("),另一个是连续两次单引号键,产生(''),在这里好似一样,而实际在sql编辑区是不同的,代码如下:

    declare @sql varchar(200)
    declare @t varchar(50)='JCZX/TX-02-1609102'
    set @sql='select ordernumber ,''"xxx"'' as tt from lim_TestingOrders  where ordernumber='''+@t+''''
    print @sql
    exec(@sql)
    

    看代码中 ''""'' as tt ;最中间的是第一中方式产生的,他只是作为一种特殊字符而已,最外面的两层引号,是第二种方式产生的,作为转译符号。

    总之:单引号在sql在才起真正的作用。他有两个作用:①字符串,②转译符;凡是在两个单引号内部的两个单引号都作为单引号处理,即内部的两个单引号有个是转译的作用,产生了一个单引号

    上面sql其中会生成: select ordernumber,"xxx" from lim_TestingOrders where ordernumber='JCZX/TX-02-1609102'

    希望对各位有困扰的人有帮助,也感谢各位在园子里努力的兄弟们。

      

  • 相关阅读:
    UE4 学习 噩梦项目
    字符串学习笔记
    luogu P4391 [BOI2009]Radio Transmission 无线传输
    luogu P2153 [SDOI2009]晨跑
    网络流学习笔记
    UVA437 【巴比伦塔 The Tower of Babylon】
    基础重修笔记
    luogu P1283 【平板涂色】
    树链剖分学习笔记
    DP学习笔记
  • 原文地址:https://www.cnblogs.com/zhaosw/p/6088040.html
Copyright © 2011-2022 走看看