備忘錄 給自己

2021-06-27 16:37:04 字數 2552 閱讀 2263

昨天,偶然發現的乙個小知識點,以後也會把小知識點累積起來:

declare @object_id int,

@object_schema_name varchar(30)=object_schema_name(@object_id)

一直是有錯誤提示,原來在乙個declare裡面,未被識別,分開decalre就好了

-- 就 逗號跟 join 的 區別 做了一點測試:

;with a as

(select 'a' as col

union all 

select 'a' as col

union all

select 'b' as col

union all

select 'c' as col

union all

select 'b' as col

union all

select 'd' as col

union all

select 'f' as col

)select  a.col as acol,b.col as bcol from a a , a b  

--沒有加上 where 條件做篩選的時候應該是 笛卡爾積

where a.col=b.col --加上 這個 篩選條件應該是 跟 inner join 等效。

declare  @object_id int

declare  @object_schema_name varchar(30)=object_schema_name(@object_id)

用來做測試表的,本不存在的表,個人覺得都是記憶體表,並不占用硬碟容量:

兩種寫法:

第一種:

--類似於通用表表示式

;with cte (name)as(

select 'tom'

union

select 'jim'

union

select 'anna'

)select * from cte

第二種:

--莫名的表,有人說是db2的寫法,應該類似於oracle的dual表,說穿了是個子查詢,所以應該是內嵌檢視

select * from

(values

('tom'),

('jim'),

('anna')

) a (name)

如果要給某個字元賦值千萬注意 null+str的情況: null 連線任何東東都是null,所以列印也列印不出的。

if (null+'abc')is null print 'null please don''t use'

查詢出各科目成績第一,第二名,不通過排名函式,類似於查詢各部門工資最高,第二高的。。。

object:  test就是一張學生成績表

select stu_subject,max(score) from test group by stu_subject

union 

select a.stu_subject,max(a.score) as score from test a inner join (select stu_subject,max(score) as score from test  group by stu_subject) as b 

on a.score!=b.score and a.stu_subject=b.stu_subject

group by a.stu_subject

merge into 目的表 t

using 源表 s on t.col=s.col

when matched then 

update set t.col5=s.col5

when not matched by target (此處預設為by target) then

insert values(s.col1,s.col2,s.col3)

利用這個取代之前 insert where not exists , update where exists  的寫法。

下面是個例子:

declare @test_tb table(stu_name varchar(30),stu_subject varchar(30),score int , row_id int identity(1,1))

insert  into 

@test_tb

select 'mary','earth',80

union 

select 'test','pe',200

merge into test t

using 

(select stu_name,stu_subject,score from @test_tb) tb on (t.stu_name=tb.stu_name)

when matched then 

update set t.score=tb.score

when not matched by target then 

insert values(tb.stu_name,tb.stu_subject,tb.score);

select * from test

備忘錄模式

備忘錄模式 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態。originator可根據需要...

備忘錄模式

先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...

備忘錄模式

面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...