2012-08-24

使用 SET NOCOUNT 關閉受影響資料筆數訊息

當我們在撰寫T-SQL時,
如果遇到批次更新資料時,
伺服器會顯示資料異動筆數,
(XX個資料列受到影響)

也會和我們PRINT的訊息混在一起,
透過SET NOCOUNT ON,將回覆受影響資料筆數訊息關閉,
不僅可以減少訊息輸出,也可以提升查詢效能!

參考自:
MSDN-SET NOCOUNT (Transact-SQL)
德瑞克:SQL Server 學習筆記

2012-08-02

flash player 11.3 crash 問題

最近flash player更新到11.3版後,使用Firefox常常會有當掉的情況,
於是移除後重新安裝舊版,但卻發生Firefox可以順利使用,
但是IE部分一直出現無法安裝的錯誤訊息,
最後利用反安裝軟體順利移除乾淨後,再重新安裝一次即可,
建議在bug尚未修正前,重新安裝時將flash player自動更新功能關閉。

2012-07-16

網路資料整理術-Pocket

不同於使用diigo的資料整理方式,
我們常會在網路上看到一些有興趣、不錯的訊息,
但是當下並沒有太多的時間可以詳細的將整篇資料看完,
這時候我就會選擇以pocket這個網站提供的功能,來記錄網頁,
待時間允許時,再將這些為整理的資料消化掉!
重點是,它支援跨平台使用PC、iOS、Android,
這樣常在手持裝置看到不錯的文章,可記錄下來,等回到電腦上後慢慢觀看!

詳細的使用方式可參考
電腦玩物-Pocket Read it later 稍後閱讀同步、離線、免費行動口袋

2012-07-11

網路資料整理術-diigo

常常在網路上看到不錯的網頁想要收藏管理(例如技術文件、保健資訊),
建議各位可以使用diigo做紀錄,該網站可以儲存網址並記錄我們指定的標籤,
方便我們日後查詢這些網頁更方便,也不會將自己的書籤搞得很雜亂,
對我來說,網站加書簽,網頁資料加diigo

教學

我常用的Google工具-(1)

http://www.google.com.tw/insidesearch/stories/

看到這篇突然覺得,Google真的是深得我心,
除了搜尋功能,下面幾個功能也推薦各位使用看看,

Gmail-這當然就不用說啦,過濾垃圾郵件一把罩,
也可以將其他郵箱透過Gmail外部郵件接收功能,過濾郵件

閱讀器-沒有那麼多時間每個網站都去逛,
就可以將自己想要關注的網站透過RSS訂閱,蒐集新文章,節省瀏覽網站時間

快訊-可以將自己想要關注的的事情"關鍵字"建立,自動會將資料發送給你

搜尋透視-可針對關鍵字統計搜尋者的統計資料,對趨勢分析很有幫助



2012-06-13

DELETE 使用 JOIN

DELETE FROM WIPPrdSpec
FROM WIPPrd P,WIPPrdSpec S
where S.ProdNo=P.ProdNo
and S.SetName='AntiSpecNo'
and P.Ptype='17010'

2012-06-02

MS SQL 利用CTE查詢各群組前幾名

上一篇MS SQL 遞迴查詢,說明CTE的基本語法,
此篇跟遞查詢沒有關係,但利用CTE產生的暫存資料來篩選出各群組排名。
--資料以SpecNo分類並PnameD欄位資料長度做排名
WITH CTE_Spec AS (
    SELECT SpecNo,Token,PA,Pcolor,PnameD,RANK() OVER (PARTITION BY SpecNo ORDER BY LEN(PnameD)) AS Seq
    FROM Prod
    WHERE isNULL(SpecNo,'') <> ''
    GROUP BY SpecNo,Token,PA,Pcolor,PnameD
)

--抓取各群組第一名
SELECT SpecNo,PnameD
FROM CTE_Spec
WHERE Seq = 1

2012-04-27

MS SQL 遞回查詢

在許多Table中會有資料自我參照的情況,
例如部門代號表,會有組織階層的關係,
若想要列出部門的階層關係,從MS SQL Server 2005開始,
便支援遞回查詢功能,可以很簡單的表示出我們要的結果!
/*------------------------------------------------------------------*/
--建立測試資料
if (select OBJECT_ID('tempdb..#Dep')) IS NOT NULL DROP TABLE #Dep
CREATE TABLE #Dep (DEPNo varchar(5),
                    DEPNa nvarchar(20),
                    FDEPNo varchar(5))

INSERT INTO #Dep Values ('0100','管理部',NULL)
INSERT INTO #Dep Values ('0200','財務部',NULL)
INSERT INTO #Dep Values ('0210','會計課','0200')
INSERT INTO #Dep Values ('0211','應收組','0210')
INSERT INTO #Dep Values ('0212','應付組','0210')
INSERT INTO #Dep Values ('0213','稅務組','0210')
INSERT INTO #Dep Values ('0214','國際會計組','0210')
INSERT INTO #Dep Values ('0220','財務課','0200')
INSERT INTO #Dep Values ('0221','出納組','0220')
INSERT INTO #Dep Values ('0222','銀行相關組','0220')

/*------------------------------------------------------------------*/
WITH Dep_CTE (FDEPNo,DEPNo,DEPNa,DEP_PATH,DEP_LEVEL) AS
(    
    --頂層
    select FDEPNo,DEPNo,DEPNa,CAST(DEPNa as varchar(MAX)),0 AS DT_LEVEL
    from #Dep
    where FDEPNo is NULL
    
    union all    
    
    --成員
    select D.FDEPNo,D.DEPNo,D.DEPNa,CAST(DC.DEP_PATH+' > '+D.DEPNa as varchar(MAX)),DC.DEP_LEVEL+1
    from #Dep D INNER JOIN Dep_CTE DC on D.FDEPNo=DC.DEPNo
)

select * from Dep_CTE
/*------------------------------------------------------------------*/

參考自
MSDN-使用一般資料表運算式的遞迴查詢
Dot Robin Notes-CTE遞回查詢-範例資料庫

2012-04-21

MS SQL-UNPOVIT-橫向資料轉縱向

之前有寫過一篇PIVOT,可以將明細資料轉為二維匯總的橫向表示方式(如Excel資料),
如果想要將橫向多欄位資料轉為縱向表示(明細),則可使用UNPIVOT。

--範例
--建立暫存表格
DECLARE @Table TABLE
( ProdNo varchar(3),
 RepQty int,
 ReaQty int,
 RecQty int)

--產生測試資料 
DECLARE @i INT
SET @i = 1
WHILE @i <= 3
BEGIN
 INSERT INTO @Table values (
  REPLICATE('0',(3-LEN(CAST(@i as varchar(3)))))+CAST(@i as varchar(3)),
  @i*(@i+1),
  @i*(@i+3),
  @i*(@i+5))
 SET @i = @i + 1
END

--資料轉換
select ProdNo,QtyType,Qty
from @Table
UNPIVOT
 (
 Qty FOR QtyType IN (RepQty,ReaQty,RecQty)
 ) PV

原始資料

執行結果


參考自:~楓花雪岳~[SQL] PIVOT 和 UNPIVOT、MSDN-使用 PIVOT 和 UNPIVOT

2012-04-16

MS SQL Function 回傳資料表(Table)

透過View可以將一些常用但又較為複雜的查詢語法,
產生虛擬的資料表,簡化我們的查詢,
但在View並無法利用T-SQL彙整更新我們想要得到的查詢結果,
此時可使用Function並將回傳型態設為Table,來達到需求!
--建立測試用Function
CREATE FUNCTION [dbo].[FN_TEST]                 (@xGPNo varchar(5))--傳入值 RETURNS @TABLE TABLE (--設定傳入值格式                 DTNo varchar(5),                 DTNa Nvarchar(50),                 Item Nvarchar(100))--設定回傳值格式 AS BEGIN       --依據傳入GPNo將查詢結果INSERT至@TABLE     INSERT INTO @TABLE (DTNo,DTNa)     select DTNo,DTNa     from NOM     where GPNo=@xGPNo      --將@TABLE中DTNo及DTNa合併更新至Item欄位     UPDATE @TABLE     SET Item=DTNo+'-'+DTNa      RETURN--回傳 END --查詢 select * from FN_TEST('PI') --結果 DTNo    DTNa    Item MT    原材料    MT-原材料 PIP    在製品    PIP-在製品 WIP    中間製品    WIP-中間製品