如果遇到批次更新資料時,
伺服器會顯示資料異動筆數,
(XX個資料列受到影響)
也會和我們PRINT的訊息混在一起,
透過SET NOCOUNT ON,將回覆受影響資料筆數訊息關閉,
不僅可以減少訊息輸出,也可以提升查詢效能!
參考自:
MSDN-SET NOCOUNT (Transact-SQL)
德瑞克:SQL Server 學習筆記
(XX個資料列受到影響)
DELETE FROM WIPPrdSpec FROM WIPPrd P,WIPPrdSpec S where S.ProdNo=P.ProdNo and S.SetName='AntiSpecNo' and P.Ptype='17010'
--資料以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
/*------------------------------------------------------------------*/
--建立測試資料
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
/*------------------------------------------------------------------*/
--範例
--建立暫存表格
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
--建立測試用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-中間製品