以下是我在网上搜索的:在程序代码里,用单引号 引起来的两个单引号,经过编译后是一个单引号,依此类推,如果想得到编译后是两个单引号,那么原代码就应该是'''''',此时中间的4个单引号其实不是单引号,而是被视为两个单引号为一个单引号:
举例说明:
'ok':编译后表示引用OK;
'''ok':编译后表示引用'ok;
'''ok''':编译后表示引用了'ok';
'''''ok''''':编译后表示引用了''ok''; 我是这样总结的:
先去掉两边各一个单引号
如果字符两边还有偶数个单引,除2再加上字符就是引用的内容
对么?
举例说明:
'ok':编译后表示引用OK;
'''ok':编译后表示引用'ok;
'''ok''':编译后表示引用了'ok';
'''''ok''''':编译后表示引用了''ok''; 我是这样总结的:
先去掉两边各一个单引号
如果字符两边还有偶数个单引,除2再加上字符就是引用的内容
对么?
下面的代码是我在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
另外,象这样,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 + ''''
------------------------------------------------------------------
還是我來解釋吧。通常情況下,這裡可以直接這麼寫 As '+Rtrim(日)+''但是由於這裡的得到的日是數字,直接拿來做列名就會產生錯誤,所以我在其前後加上單引號,其實也可以這麼寫。
As ['+Rtrim(日)+']'為了讓你更好的明白,你可以測試以下幾個語句Select 1 As 10
Select 1 As '10'
Select 1 As [10]第一個語句有錯誤,而二三兩個沒錯誤。PS:貼我的代碼,當心告你侵權叻 。 :)
我是学法律的,别吓唬我。。
那,这个呢:
另外,象这样,EXEC('SELECT * FROM tb where '+@S+'')后面的空引必须得要么有什么意义呢