在使用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'
希望對各位有困擾的人有幫助,也感謝各位在園子里努力的兄弟們。

