å 个æ¦å¿µï¼
Aãæ è¯ç¬¦ï¼æ¯æ°æ®åºå¯¹è±¡çå称ã
æ°æ®åºå¯¹è±¡çå称被çææ¯è¯¥å¯¹è±¡çæ è¯ç¬¦ãMicrosoft® SQL Server™ ä¸çæ¯ä¸å
容é½å¯å¸¦ææ è¯ç¬¦ãæå¡å¨ãæ°æ®åºåæ°æ®åºå¯¹è±¡ï¼ä¾å¦è¡¨ãè§å¾ãåãç´¢å¼ã触åå¨ãè¿ç¨ã约æãè§åçï¼é½ææ è¯ç¬¦ã大å¤æ°å¯¹è±¡è¦æ±å¸¦ææ è¯ç¬¦ï¼ä½å¯¹æäºå¯¹è±¡ï¼å¦çº¦æï¼æ è¯ç¬¦æ¯å¯é项ã
Bãä¿çå
³é®åï¼æ¯sqlè¯è¨çè¯æ³ãå±äºä»£ç çèç´ã
ä¿çå
³é®åæ¯ç¨æ¥å®ä¹ãæä½å访é®æ°æ®åºãä¿çå
³é®åæ¯ SQL Server 使ç¨ç Transact-SQL è¯è¨è¯æ³çä¸é¨åï¼ç¨äºåæåç解 Transact-SQL è¯å¥åæ¹å¤çãå°½ç®¡å¨ Transact-SQL èæ¬ä¸ï¼ä½¿ç¨ SQL Server ä¿çå
³é®åä½ä¸ºæ è¯ç¬¦å对象åå¨è¯æ³ä¸æ¯å¯è¡çï¼ä½è§å®åªè½ä½¿ç¨åéæ è¯ç¬¦ã
Cãå符串ï¼æ°æ®ç±»åçä¸ç§ï¼æ°æ®ç±»åææ´æ°åãå符串åçãå±äºæ°æ®çèç´ã
æ¯ä¸ªåãå±é¨åéã表达å¼ååæ°é½æä¸ä¸ªç¸å
³çæ°æ®ç±»åãå³å±äºæç§æ°æ®ç±»åã
Dãéé
符ã转ä¹ç¬¦ï¼è¿2个æ¯è·å符串ç¸å
³çæ¦å¿µãä¸è¬åºç°å¨å符串ä¸ã
æ¯å¦ like âdsd%â ï¼ dsd% æ¯å符串ã%æ¯éé
符ãè¿ä¸ªè¯å¥çå«ä¹å¤§å®¶åºè¯¥é½ç¥éï¼^_^ã
使ç¨è½¬ä¹ç¬¦ï¼å¯ä»¥æéé
符æ¹åææ®éå符ã2ç§æ¹æ³ï¼
1ã[]æ¯é»è®¤ç转ä¹ç¬¦ï¼éé¢çéé
符ï¼éé¢åªè½æ¯éé
符ï¼ï¼é½å½åæ®éå符å¤çï¼
like âdsd[%]âï¼è¿æ¶ï¼%å°±æ¯ä¸ªæ®éå符äºï¼æ¥æ¾æ¡ä»¶å°±æ¯è¦æ个å段å¼å®å
¨çäº dsd% ã
2ãç¨ESCAPEå
³é®åå®ä¹è½¬ä¹ç¬¦ï¼
like âdsd/%â ESCAPE â/' ææå like âdsd[%]â
è¿æä¸ç§è½¬ä¹ç¬¦æ
åµï¼
大家ç¥éï¼åå¼å·ä¸è¬å¯ç¨æ¥å
å«å符串ï¼å¦æå符串ä¸æåå¼å·æ¯æ®éå符ï¼é£ä¹å°±åæ¶æäº2ç§ææçåå¼å·ï¼æä¹åºåå¢ï¼å°±è¦ç¨2个åå¼å·æ¥è½¬ä¹ä¸ºæ®éå符ï¼å¦ like âds''dâ ï¼å
¶å®å°±æ¯æå符串ï¼ds'd
åé¢æå°çQUOTENAMEå½æ°ï¼é»è®¤æ¯ç¨[]æ¥ååé符ï¼å¦æå符串ä¸æ[]ï¼å½æ°è½¬æ¢åï¼å符串ä¸ç[]å°±è¦ç¨ä¸¤ä¸ª]]æ¥è½¬ä¹ï¼è¡¨æè¿ä¸ª[]æ¯ä¸ªæ®éå符ï¼ä¸å符串ååçåé符 [] ç¸åºå«ã
æ¥å
¥æ£é¢ï¼
æ è¯ç¬¦ï¼å为ï¼
ä¸ã常è§æ è¯ç¬¦ï¼ç¬¦å常è§æ è¯ç¬¦è§åçæ è¯ç¬¦ã
常è§æ è¯ç¬¦è§åå¦ä¸ï¼ï¼åèsqlserverçèæºå¸®å©ï¼
1ãããããã
2ãããããã
3ãããããã
4ãããããã
äºãåéæ è¯ç¬¦ï¼å
å«å¨åå¼å· " æè
æ¹æ¬å· [ ] å
çæ è¯ç¬¦å°±æ¯åéæ è¯ç¬¦ã
注æï¼åå¼å· " æè
æ¹æ¬å· [ ] æ¯åé符ã
å¨ Transact-SQL è¯å¥ä¸ï¼å¯¹ä¸ç¬¦å常è§æ è¯ç¬¦è§åçæ è¯ç¬¦å¿
é¡»ç¨åå¼å·ææ¹æ¬å·æ¥åéã符åæ è¯ç¬¦æ ¼å¼è§åçæ è¯ç¬¦å¯ä»¥åéï¼ä¹å¯ä»¥ä¸åéã
1ãå½QUOTED_IDENTIFIER 为 ON æ¶ï¼é»è®¤æ¯onçã SQL Server éµå¾ª SQL-92 è§åï¼
åå¼å·åªè½ç¨äºåéæ è¯ç¬¦ï¼ä¸è½ç¨äºåéå符串ã
为ä¿æä¸ç°æåºç¨ç¨åºçå
¼å®¹æ§ï¼SQL Server 并ä¸å®å
¨å¼ºå¶è¯¥è§åãå¦æå符串没æè¶
è¿æ è¯ç¬¦çé¿åº¦ï¼å该å符串å¯å
å«å¨åå¼å·å
ãä½ä¸å»ºè®®è¿æ ·åã
åå¼å·å¿
é¡»ç¨æ¥å
å«å符串ï¼ä¸è½ç¨äºåéæ è¯ç¬¦ã
å¦æå符串å
å«åå¼å·ï¼åéè¦å¨åå¼å·ååå¢å ä¸ä¸ªåå¼å·ï¼
SELECT * FROM "My Table"
WHERE "Last Name" = 'O''Brien'
注æï¼"Last Name"ï¼ä½ å¯ä»¥åæ'Last Name'èä¸ä¼æ¥è¯æ³é误ï¼æ¯å 为ï¼sql认为æ¯è¿è¡å符串çæ¯è¾äºï¼æ¯å¦åæ'Last Name'='Last Name'ï¼æ¯è¾ç»æ为çï¼è¡¨ä¸çå
¨é¨è®°å½å°±è¢«selectåºæ¥äºãèå¦æåæï¼WHERE "Last Name" = "O''Brien"ï¼å³çå·å³è¾¹æ¹æåå¼å·ï¼åä¼æO''Brienå½æä¸ä¸ªæ è¯ç¬¦ï¼æ°æ®åºå¯¹è±¡ï¼ï¼å³å½æä¸ä¸ªå段åï¼è¿è¡æ¶ï¼ä¼æ示没æO''Brienåã 2ãå½ QUOTED_IDENTIFIER 为 OFF æ¶ï¼å¯¹äºåå¼å·ååå¼å·ç使ç¨ï¼SQL Server éµå¾ªå¦ä¸è§åï¼
å¼å·ä¸è½ç¨äºåéæ è¯ç¬¦ï¼èæ¯ç¨æ¬å·ä½ä¸ºåé符ã
åå¼å·æåå¼å·å¯ç¨äºå
å«å符串ã
å¦æ使ç¨åå¼å·ï¼åµå
¥çåå¼å·ä¸éè¦ç¨ä¸¤ä¸ªåå¼å·æ¥è¡¨ç¤ºï¼
SELECT * FROM [My Table]
WHERE [Last Name] = "O'Brien"
常è§æ è¯ç¬¦ååéæ è¯ç¬¦å
å«çå符æ°å¿
é¡»å¨ 1 å° 128 ä¹é´
å¦å¤ï¼
å°æ è¯ç¬¦ç¨ä½åæ°ï¼(å
·ä½è¯·åèèæºå¸®å©ï¼
许å¤ç³»ç»åå¨è¿ç¨ãå½æ°å DBCC è¯å¥é½æ对象åå½ä½åæ°ãå
¶ä¸ä¸äºåæ°æ¥åå¤é¨å对象åï¼å¦ä¸äºååªæ¥ååé¨åå称ãæ¥ååé¨å对象å称è¿æ¯å¤é¨å对象å称å³å®äº SQL Server å¨å
é¨å¦ä½åæå使ç¨åæ°ã ããããããã
å¦å¤ï¼
QUOTENAMEå½æ°ï¼
msdn解éï¼è¿å带æåé符ç Unicode å符串ï¼åé符çå å
¥å¯ä½¿è¾å
¥çå符串æ为ææç Microsoft® SQL Server™ åéæ è¯ç¬¦ã
以ä¸ç¤ºä¾æ¥åå符串 abc[]def å¹¶ä½¿ç¨ [ å ] å符æ¥å建ææç SQL Server åéæ è¯ç¬¦ï¼
SELECT QUOTENAME('abc[]def')
ä¸é¢æ¯ç»æéï¼
[abc[]]def]
(1 row(s) affected)
注æï¼å符串"abc[]def"ä¸çå³æ¬å·æ两个ï¼ç¨äºè¡¨ç¤ºè½¬ä¹ç¬¦ï¼è½¬æ¢ææ®éå符ï¼ä¸åé符 [] ç¸åºå«ã
解éï¼å符串 abc[]def ä¸ç[]æ¯å½åæ®éå符ï¼æä»¥ç¨ ] ] æ¥è¡¨ç¤º ] æ¯ä¸ªæ®éå符ï¼å³è¡¨æä¸é´ç [] å°±æ¯ä¸ªæ®éå符ã
å¦ææ¯ï¼SELECT QUOTENAME('abc[]def' , '()' ) ï¼ä¸ç¨[]æ¥ååé符ï¼é£ä¹ç»ææ¯ï¼
(abc[]def) ï¼å°±ä¸ç¨ä¸¤ä¸ª]] æ¥è½¬ä¹äºï¼å 为æ°çå符串ä¸åªæä¸ç§ææç[]ï¼å³æ®éå符ã
è¿æ¯ä¸ªéç¨çè§åï¼æ¯å¦å符串ä¸å«æåå¼å· ' 为æ®éå符串æ¶ï¼æ¯å¦ ï¼ds'd ï¼
like è¯å¥å°±è¦æ¹æï¼like âdsââdâï¼èä¸æ¯ï¼ like 'ds'd' ãå³2个åå¼å·è¡¨ç¤ºè½¬ä¹ç¬¦ï¼è½¬æ¢ææ®éåå¼å·å符 ' ã
追é®å«å¤å¶ç²è´´å¥½åâ¦