T-SQL中单引号的使用 
 
在不同的数据库中执行相同的脚本这篇里面说道如何使用游标在不同的数据库中执行相同的脚本。思路是通过游标取SELECT NAME FROM sys.databases结果的每一行的值,将此值赋给一个变量,将此变量放在一个动态sql执行。
将一个查询语句赋值给 @sql时,就有一些绕不过的问题:如何处理查询语句中的单引号和\。假如要将下面的查询变成一个动态sql执行:
 
  1. update dbo.UserInfo 
  2. set tp_login = 'hk\liudehua'
  3.      tp_Title = 'hk04.刘德华'
  4.      tp_Email = 'liudehua@hk.com' 
  5. where tp_login  = 'hk\v-liudehua' 
 
作为一个小白,我开始是这么干的,我天真的以为在一个单引号中间将这个代码插进去就行了:
 
  1. DECLARE @sql AS VARCHAR(300) 
  2. DECLARE @tp_login AS VARBINARY(20) 
  3. SET @sql ='update dbo.UserInfo 
  4.  set tp_login = 'hk\liudehua'
  5.      tp_Title = 'hk04.刘德华'
  6.      tp_Email = 'liudehua@hk.com' 
  7. where tp_login  = 'hk\v-liudehua''; 
  8. EXEC @sql 
弄好以后执行,SQL Server Management Studio告诉我hk这里出错了
 
 
  1. 消息 102,级别 15,状态 1,第 4 行 
  2. 'hk' 附近有语法错误。 
我看过几天的正则表达式,我觉得是该死的斜杠害了我,我就改成了下面的样子
 
  1. DECLARE @sql AS VARCHAR(300) 
  2. DECLARE @tp_login AS VARBINARY(20) 
  3. SET @sql ='update dbo.UserInfo 
  4.  set tp_login =  'hk'+'\'+'liudehua', 
  5.      tp_Title = 'hk04.刘德华'
  6.      tp_Email = 'liudehua@hk.com' 
  7. where tp_login  = 'hk\v-liudehua''; 
尽管我有忧郁的眼神稀拉的胡须打得一手好雷电,但是SQL Server Management Studio还是告诉出错了,出错地地方与刚才一样。仔细检查了一下,发现SQL Server Management Studio是很傻的,它将两个'之间的视为一个部分,而不管这段语句中有几个’‘,所以SQL Server Management Studio将

  1. 'update dbo.UserInfo 
  2.  set tp_login =  '

视为一个部分,后面的hk是一个字符,但没有加引号,所以在这里就是非法字符,肯定报错。知道这点就好办了,把该加单引号的地方都加上,一个不能少。
 
可惜机器就是机器,就是他妈的无情,检查通过了,但是执行报错。随后在后面我尝试加双引号加/,一概不行