以下是我在网上搜索的:在程序代码里,用单引号 引起来的两个单引号,经过编译后是一个单引号,依此类推,如果想得到编译后是两个单引号,那么原代码就应该是'''''',此时中间的4个单引号其实不是单引号,而是被视为两个单引号为一个单引号:
举例说明:
'ok':编译后表示引用OK;
'''ok':编译后表示引用'ok;
'''ok''':编译后表示引用了'ok';
'''''ok''''':编译后表示引用了''ok''; 我是这样总结的:
先去掉两边各一个单引号
如果字符两边还有偶数个单引,除2再加上字符就是引用的内容
对么?

解决方案 »

  1.   

    哦,谢谢
    下面的代码是我在csdn上看到的
    请解释:
    Select @S1=@S1+',Max(Case 日 When '+Rtrim(日)+' Then 预定加班 Else 0 End) As '''+Rtrim(日)+''''
    这里为什么会有As '''+Rtrim(日)+''''这样的写法?这些单引号什么意思?---------------------------------------
    Create Table TEST(姓名 Nvarchar(10),
     编号 Int,
     日 Int,
     预定加班 Int,
     实际加班 Int)
    Insert TEST Select N'张三', 1111,  28,    4,          3
    Union All Select N'张三', 1111,  10,    1,          4
    Union All Select N'李四', 2222,  15,    3,          5
    Union All Select N'王五', 3333,  23,    5,          4
    Union All Select N'李四', 2222,  10,    2,          5
    SELECT * from test
    GO
    --測試
    Declare @S1 Nvarchar(4000),@S2 Nvarchar(4000),@S3 Nvarchar(4000) 
    Set @S1=''
    Set @S2=''
    Set @S3=''
    Select @S1=@S1+',Max(Case 日 When '+Rtrim(日)+' Then 预定加班 Else 0 End) As '''+Rtrim(日)+'''',
    @S2=@S2+',Max(Case 日 When '+Rtrim(日)+N' Then 实际加班 Else 0 End) As '''+Rtrim(日)+'''',
    @S3=@S3+',Max(Case 日 When '+Rtrim(日)+N' Then 实际加班+预定加班 Else 0 End) As '''+Rtrim(日)+''''From TEST Group By 日 Order By 日EXEC
    (
    'Select * From
    (Select 
    姓名+''预定''As 姓名,编号 '+@S1+',SUM(预定加班)As 合计 From TEST Group By 姓名+''预定'',编号 
    Union All 
    Select 姓名,编号'+@S2+N',SUM(实际加班) As 合计 From TEST Group By 姓名,编号 
    Union All 
    Select ''合计'',Null'+@S3+N',SUM(实际加班+预定加班) As 合计 From TEST
    )A 
    Order By  (Case 姓名 When ''张三'' Then 1 Else 0 End),姓名 desc
    ')Drop Table TEST
      

  2.   

    没人么?那帮我看看以下的推理正确否。
    另外,象这样,EXEC('SELECT * FROM tb  where '+@S+'')后面的空引必须得要么有什么意义呢
    -----------------------------------
    想要的where子句是
    col2='a'
    但在exec里,相当于'col2='a''===>'(col2) + (= ) + ('a')'
    即:'col2' + '=' + ''a''
    即:@b + '=' + '@a'
    但这样写exec无法识别@a,所以要稍微变一下,把
    'col2='a''===>'(col2 + (=') + (a'))'===>'col2' + '=''+ 'a''===>@b + '=''' + @a + ''
    最后有一个空引,所以是:===>@b + '=''' + @a + ''''
      

  3.   

    这里为什么会有As '''+Rtrim(日)+''''这样的写法?这些单引号什么意思?
    ------------------------------------------------------------------
    還是我來解釋吧。通常情況下,這裡可以直接這麼寫 As '+Rtrim(日)+''但是由於這裡的得到的日是數字,直接拿來做列名就會產生錯誤,所以我在其前後加上單引號,其實也可以這麼寫。
    As ['+Rtrim(日)+']'為了讓你更好的明白,你可以測試以下幾個語句Select 1 As 10
    Select 1 As '10'
    Select 1 As [10]第一個語句有錯誤,而二三兩個沒錯誤。PS:貼我的代碼,當心告你侵權叻 。 :)
      

  4.   

    hehe,谢谢
    我是学法律的,别吓唬我。。
    那,这个呢:
    另外,象这样,EXEC('SELECT * FROM tb  where '+@S+'')后面的空引必须得要么有什么意义呢