2018年7月11日 星期三

[SQL] FETCH 應用

前言

在一個匯入中想取得流水號並且逐筆加一的情況下
單純使用Insert 時取得的流水號皆為同一組
原因為SQL執行一批資料時取得的最大值皆會是同一個
意思就是進行一批資料的Insert時並不是一筆一筆進入資料庫的
update 同理
所以來試試FETCH吧~


用法

Declare @SN int
DECLARE PDAgreeSN CURSOR FOR --建立FETCH、取得Key值
select SN from aa_Bee2

OPEN PDAgreeSN;--開啟FETCH
FETCH NEXT FROM PDAgreeSN --塞入第一筆數值
INTO @SN;
WHILE @@FETCH_STATUS = 0 --FETCH成功則繼續
BEGIN
--取到SN了想幹嘛就幹嘛
update aa_Bee2 set PDAgreeSN=dbo.GetPDSN(30030,GETDATE()) --取流水號的某個FN
where SN=@SN

FETCH NEXT FROM PDAgreeSN --塞入下筆數值
INTO  @SN;
END
CLOSE PDAgreeSN; --關閉FETCH
DEALLOCATE PDAgreeSN; --刪除FETCH

2018年7月8日 星期日

[CMD] 取得日期

前言

某客戶要求我所有的換版指令只能使用bat檔執行
簡單來說他想要一鍵執行換版
在現場執行時我原本以為我指令寫得很完美了
結果沒想到因為產生資料夾時使用%Date%參數
在對方Server的日期排列跟我電腦不同
YYYY-MM-DD>MM-DD-YYYY
之類的所以正常用%date:~0,4%
很容易抓歪,或著抓到空白造成產檔問題
造成產生檔名時有空白,無法順利執行指令

正文

運用%Date% 與%Time%
取代掉不符合檔名原則之字元

//指令
set dt=%Date%_%Time%

set dt=%dt: =%
set dt=%dt:/=%
set dt=%dt::=%
set dt=%dt:.=%

echo %dt%

//產出
set dt=2020/04/25 週六_15:45:17.27
set dt=2020/04/25週六_15:45:17.27
set dt=20200425週六_15:45:17.27
set dt=20200425週六_154517.27
set dt=20200425週六_15451727
echo 20200425週六_15451727