SQL定序
CaseSensitivity
CI 指定不區分大小寫,CS 指定區分大小寫。
AccentSensitivity
AI 指定不區分腔調字,AS 指定區分腔調字。
BIN
指定要用的二進位排序次序。
SQL帳號孤兒
https://dotblogs.com.tw/pei_hsin/2012/01/28/67053
ORM神器-Dapper
https://dotblogs.com.tw/topcat/2016/10/06/165217
WCF、WebAPI、WCFREST、WebService之間的區別
原文網址:https://read01.com/6GdOdP.html
在.net平台下,有大量的技術讓你創建一個HTTP服務,像Web Service,WCF,現在又出了Web API。在.net平台下,你有很多的選擇來構建一個HTTP Services。我分享一下我對Web Service、WCF以及Web API的看法。
Web Service
1、它是基於SOAP協議的,數據格式是XML
2、只支持HTTP協議
3、它不是開源的,但可以被任意一個了解XML的人使用
4、它只能部署在IIS上
WCF
1、這個也是基於SOAP的,數據格式是XML
2、這個是Web Service(ASMX)的進化版,可以支持各種各樣的協議,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.
3、WCF的主要問題是,它配置起來特別的繁瑣
4、它不是開源的,但可以被任意一個了解XML的人使用
5、它可以部署應用程式中或者IIS上或者Windows服務中
WCF Rest
1、想使用WCF Rest service,你必須在WCF中使用webHttpBindings
2、它分別用[WebGet]和[WebInvoke]屬性,實現了HTTP的GET和POST動詞
3、要想使用其他的HTTP動詞,你需要在IIS中做一些配置,使.svc文件可以接受這些動詞的請求
4、使用WebGet通過參數傳輸數據,也需要配置。而且必須指定UriTemplate
5、它支持XML、JSON以及ATOM這些數據格式
Web API
1、這是一個簡單的構建HTTP服務的新框架
2、在.net平台上Web API 是一個開源的、理想的、構建REST-ful 服務的技術
3、不像WCF REST Service.它可以使用HTTP的全部特點(比如URIs、request/response頭,緩存,版本控制,多種內容格式)
4、它也支持MVC的特徵,像路由、控制器、action、filter、模型綁定、控制反轉(IOC)或依賴注入(DI),單元測試。這些可以使程序更簡單、更健壯
5、它可以部署在應用程式和IIS上
6、這是一個輕量級的框架,並且對限制帶寬的設備,比如智慧型手機等支持的很好
7、Response可以被Web API的MediaTypeFormatter轉換成Json、XML 或者任何你想轉換的格式。
2018年萬金石馬
近期跑的最辛苦的馬,變步兵又曬傷,還一度想棄賽~
前半馬陰天無風很好跑,但後半出大太陽才是重頭戲,
先是水站缺水杯,又遇缺水,
21K約花2.5H,但在28K速度就HOLD不住了
抽筋也是免不了的,約在32K慘案發生,
5小時是不可能了,只求無傷完賽,
走走停停,當欣賞風景囉!
PS1.顏值高的馬尾妹真多
PS2.配速員:戴2016大阪馬帽的馬尾妹,感謝有您
PS3.第一次沒帶手機在身上,解放的感覺真好
避免Excel開啟CSV時截掉左補零的小工具
http://blog.darkthread.net/post-2012-04-12-keep-csv-leading-zeros-in-excel.aspx
最大群組關聯
近期遇到最難的邏輯
if object_id('tempdb..#IL_Benson') is not null
drop table #IL_Benson ;
create table #IL_Benson (
ActSeq varchar(19) --18
, GCNo varchar(21) --21
, ActSeq_T varchar(19)
, GCNo_T varchar(21)
, RUN int default 0) ;
insert into #IL_Benson (ActSeq, GCNo)
values ('ACT1', 'A')
, ('ACT2', 'B'), ('ACT2', 'C'), ('ACT2', 'D')
, ('ACT3', 'A'), ('ACT3', 'C')
, ('ACT4', 'D')
, ('ACT5', 'D'), ('ACT5', 'E')
, ('ACT6', 'F'), ('ACT6', 'G')
, ('ACT7', 'F')
, ('ACT8', 'G'), ('ACT8', 'H')
, ('ACT9', 'Z')
/*
update a
set a.RUN = 0
, a.ActSeq_T = null
, a.GCNo_T = null
from #IL_Benson a
select a.ActSeq, a.GCNo, a.ActSeq_T, a.GCNo_T, a.RUN
from #IL_Benson a
order by 1, 2
*/
--資料檢測,RUN<0
--(RUN=-1) 1 ACT to 1 GC
update a
set a.ActSeq_T = a.ActSeq
, a.GCNo_T = a.GCNo
, a.RUN = -1
from #IL_Benson a
inner join (
select a.ActSeq, count(distinct a.GCNo) CNT
from #IL_Benson a
group by a.ActSeq
having count(distinct a.GCNo) = 1 ) b
on a.ActSeq = b.ActSeq
inner join (
select a.GCNo, count(distinct a.ActSeq) CNT
from #IL_Benson a
group by a.GCNo
having count(distinct a.ActSeq) = 1 ) c
on a.GCNo = c.GCNo
;
--(RUN=-2) 1 ACT to Multi GC and 1 GC to 1 ACT
update a
set a.ActSeq_T = a.ActSeq
, a.GCNo_T = b.GCNo_T
, a.RUN = -2
--select count(*)
from #IL_Benson a
inner join (
select a.ActSeq, count(distinct a.GCNo) CNT, min(a.GCNo) GCNo_T
from #IL_Benson a
group by a.ActSeq
having count(distinct a.GCNo) > 1 ) b
on a.ActSeq = b.ActSeq
inner join (
select b.ActSeq, count(distinct a.ActSeq) cnt
from #IL_Benson a
inner join (
select a.ActSeq, a.GCNo
from #IL_Benson a
inner join (
select a.ActSeq, count(distinct a.GCNo) CNT
from #IL_Benson a
group by a.ActSeq
having count(distinct a.GCNo) > 1 ) b
on a.ActSeq = b.ActSeq ) b
on a.GCNo = b.GCNo
group by b.ActSeq
having count(distinct a.ActSeq) = 1 ) c
on a.ActSeq = c.ActSeq
where a.ActSeq_T is null
and a.GCNo_T is null
;
--(RUN=-3) 1 ACT to 1 GC and 1 GC to Multi ACT
update a
set a.ActSeq_T = b.ActSeq_T
, a.GCNo_T = a.GCNo
, a.RUN = -3
--select count(*)
from #IL_Benson a
inner join (
select a.GCNo, count(distinct a.ActSeq) CNT, min(a.ActSeq) ActSeq_T
from #IL_Benson a
group by a.GCNo
having count(distinct a.ActSeq) > 1 ) b
on a.GCNo = b.GCNo
inner join (
select b.GCNo, count(distinct a.GCNo) cnt
from #IL_Benson a
inner join (
select a.ActSeq, a.GCNo
from #IL_Benson a
inner join (
select a.GCNo, count(distinct a.ActSeq) CNT
from #IL_Benson a
group by a.GCNo
having count(distinct a.ActSeq) > 1 ) b
on a.GCNo = b.GCNo ) b
on a.ActSeq = b.ActSeq
group by b.GCNo
having count(distinct a.GCNo) = 1
) c
on a.GCNo = c.GCNo
where a.ActSeq_T is null
and a.GCNo_T is null
;
--select * from #IL_Benson
--------------------------------------
--補衍伸關聯資料,RUN=1
DECLARE @RC INT
DECLARE @RUN INT
select @RC = count(*)
--select count(*)
from #IL_Benson a
where a.ActSeq_T is null
WHILE @RC > 0
BEGIN
SET @RC = 0
insert into #IL_Benson (ActSeq, GCNo, RUN)
select distinct b.ActSeq_T ActSeq, a.GCNo, 1
from #IL_Benson a
inner join (
select distinct b.ActSeq ActSeq_T, a.ActSeq, b.GCNo
from #IL_Benson a
inner join (
select distinct a.ActSeq, a.GCNo
from #IL_Benson a
where a.ActSeq_T is null
--and a.ActSeq = '3'
) b
on a.GCNo = b.GCNo ) b
on a.ActSeq = b.ActSeq
left outer join #IL_Benson c
on b.ActSeq_T = c.ActSeq
and a.GCNo = c.GCNo
and c.ActSeq_T is null
where a.ActSeq_T is null
and c.ActSeq is null
set @RC = @RC + @@ROWCOUNT
--select * from #IL_Benson where Run=1
insert into #IL_Benson (ActSeq, GCNo, RUN)
select distinct a.ActSeq, b.GCNo_T GCNo, 1
from #IL_Benson a
inner join (
select distinct b.GCNo GCNo_T, b.ActSeq, a.GCNo
from #IL_Benson a
inner join (
select distinct a.ActSeq, a.GCNo
from #IL_Benson a
where a.ActSeq_T is null
--and a.GCNo = 'D'
) b
on a.ActSeq = b.ActSeq ) b
on a.GCNo = b.GCNo
left outer join #IL_Benson c
on a.ActSeq = c.ActSeq
and b.GCNo_T = c.GCNo
and c.ActSeq_T is null
where a.ActSeq_T is null
and c.ActSeq is null
set @RC = @RC + @@ROWCOUNT
--select * from #IL_Benson where Run=1
--select a.RUN, count(*)
--from #IL_Benson a
--where a.ActSeq_T is null
--group by a.RUN
END
update a
set a.ActSeq_T = a.ActSeq
, a.GCNo_T = a.GCNo
from #IL_Benson a
where a.ActSeq_T is null
and a.GCNo_T is null
--select * from #IL_Benson order by ActSeq_T,GCNo_T
--------------------------------------
declare @RC INT
select @RC = count(*)
from #IL_Benson a
where a.RUN >= 0
--select @RC
WHILE @RC > 0
BEGIN
SET @RC = 0
update a
set a.ActSeq_T = b.ActSeq
--select count(*)
from #IL_Benson a
inner join (
select a.GCNo GCNo, min(a.ActSeq) ActSeq
from #IL_Benson a
where a.RUN >= 0
group by a.GCNo ) b
on a.GCNo_T = b.GCNo
and a.ActSeq_T <> b.ActSeq
where a.RUN >= 0
SET @RC = @RC + @@ROWCOUNT
update a
set a.GCNo_T = b.GCNo
--select count(*)
from #IL_Benson a
inner join (
select a.ActSeq ActSeq, min(a.GCNo) GCNo
from #IL_Benson a
where a.RUN >= 0
group by a.ActSeq ) b
on a.ActSeq_T = b.ActSeq
and a.GCNo_T <> b.GCNo
where a.RUN >= 0
SET @RC = @RC + @@ROWCOUNT
END
--select * from #IL_Benson order by ActSeq,GCNo
GRIDVIEW的總筆數
https://dotblogs.com.tw/shadow/2011/07/24/32044
小技巧,可一個SQL搞定

