[轉貼]T-SQL — Common Table Expression (CTE) 教學重點筆記

http://kkbruce.blogspot.com/2011/01/t-sql-common-table-expression-cte.html

 

重點筆記:

  • 可以把CTE當成”Temp View”
  • 如果在Store Procedure使用CTE,會造成每次執行都會re-compiler,效能低落
  • 資料集未以Table存放於Database時,適合用CTE
  • View通常用來分解大型查詢,如果只用一次,那View不是好辦法
  • 子查詢只能從所在的”陳述式”存取,如果有多個相同的子查詢,必須含重覆程式碼,難閱讀及維護
  • CTE能在同批次下,重覆使用(像View一樣)
  • CTE只能用於其後第一個陳述式(Select, Insert, Delete, Update),此陳述式可多次取用CTE
  • CTE後面可接另一個CTE,使用逗號(,)

 

[轉貼]關於CTE

SQL – 使用 一般資料表運算式 CTE (Common Table Expression)

早期可以透過暫存資料 表(# 或 ##)或者 table 來存放資料,現在也可以使用 一般資料表運算式 CTE (Common Table Expression) 來暫存資料。雖然 CTE 的查詢是使用 Select 查詢,但是依照 MSDN 的說明,仍有一些限制,那就是在 CTE 中不可以使用以下的子句:

1.COMPUTE 或 COMPUTE BY
2.ORDER BY (除非指定了 TOP 子句)
3.INTO
4.含有查詢提示的 OPTION 子句
5.FOR XML
6.FOR BROWSE

以下就來實作一些 CTE 的範例…

範例一:單一的 CTE 用法

WITH OrdersTable (訂單ID, 客戶ID, 員工ID) as
(
Select OrderID, CustomerID, EmployeeID
from dbo.Orders
)

Select *
From OrdersTable

範例二:兩個 CTE 作 Join

WITH OrdersTable (訂單ID, 客戶ID, 員工ID) as
(
Select OrderID, CustomerID, EmployeeID
from dbo.Orders
),
OrderDetailsTable as
(
Select OrderID as ‘訂單ID’, ProductID as ‘產品ID’, UnitPrice as ‘價格’
from dbo.[Order Details]
)

Select *
From OrdersTable A inner join OrderDetailsTable B
on A.訂單ID = B.訂單ID

範例三:CTE 遞迴 (參考:黑暗大的部落格文章)

資料清單

Code:

–如果CTE的WITH不在第一列, 前方要加上;
;WITH 公司組織結果(部門名稱, 直屬部門, 層級, 排序欄位)
AS
(
–Recursive CTE分為兩個部分, 第一部分為Anchor Member
–指不會被遞迴呼叫到的部分
SELECT 部門名稱, 直屬部門, 0, CONVERT(nvarchar(128), 部門ID)
FROM dbo.公司組織 WHERE 直屬部門=N’ROOT’

UNION ALL

–UNION ALL後方的部分稱為Recursive Member, 會在遞迴過程中反覆執行,
–直到無任何查詢結果為止
SELECT P.部門名稱, P.直屬部門, B.層級+1,
CONVERT(nvarchar(128), B.排序欄位 + ‘-‘ + CONVERT(nvarchar(128), P.部門ID))
FROM dbo.公司組織 P, 公司組織結果 B
WHERE P.直屬部門=B.部門名稱
)
SELECT (REPLICATE(‘       ‘, 層級) + 部門名稱) as ‘部門名稱’, 層級, 排序欄位
FROM 公司組織結果
ORDER BY 排序欄位

另一個 CTE 遞迴範例 (參考:Journey to SQL Authority with Pinal Dave)

Code:

USE AdventureWorks
GO
WITH Emp_CTE AS (
–找出 ManagerID 為 NULL 的資料當作 Anchor Member
SELECT EmployeeID, ContactID, LoginID, ManagerID, Title, BirthDate
FROM HumanResources.Employee
WHERE ManagerID IS NULL

UNION ALL

–之後以 Anchor Member 為依據遞迴查詢
SELECT e.EmployeeID, e.ContactID, e.LoginID, e.ManagerID, e.Title, e.BirthDate
FROM HumanResources.Employee e
INNER JOIN Emp_CTE ecte ON ecte.EmployeeID = e.ManagerID
)
SELECT *
FROM Emp_CTE
GO

 

[轉貼]SQL建立DB LINK的方法

原文網址


--Add DB Link Server
EXEC sp_addlinkedserver
@server = 'F6', --Server Name
@srvproduct = 'MS SQL',
@datasrc = '192.168.1.1' , --Server IP
@provider = 'SQLNCLI'

--Remove DB Link Server
EXEC sp_dropserver
@server = 'F6' --Server Name

--Add Login User and Password
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'F6' , --Server Name
@useself = 'false' ,
@locallogin = NULL ,
@rmtuser = 'sa' , --User
@rmtpassword = 'sasa' --Password
--Add DB Link Server
EXEC sp_addlinkedserver
@server = 'F6', --Server Name
@srvproduct = 'MS SQL',
@datasrc = '192.168.1.1' , --Server IP
@provider = 'SQLNCLI'

--Remove DB Link Server
EXEC sp_dropserver
@server = 'F6' --Server Name

--Add Login User and Password
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'F6' , --Server Name
@useself = 'false' ,
@locallogin = NULL ,
@rmtuser = 'sa' , --User
@rmtpassword = 'sasa' --Password

--Query DB Link Server
select * from sys.servers
--Query DB Link Server
select * from sys.servers

--Query Login User
select * from sys.linked_logins
--Query Login User
select * from sys.linked_logins

--Query DB Link Data
select * from [F6].[database].[dbo].[table]
--select * from [server name].[database name].[owner name].[table name]

--Query DB Link Data
select * from [F6].[database].[dbo].[table]
--select * from [server name].[database name].[owner name].[table name]

小人物 大公司 續一

加班絕對是場揮之不去的夢魘

駐點開始….,但正常上下班的日子過沒一個月,

交付大陸的程式回來了!!
畫面流程有問題!!
電文測試不通!!

解決問題就是我的專業…..自信滿滿的我,
為解問題,加班無法避免…..認真負責的我.

跟大陸合作就是會遇到這樣的問題,我已有這心理建設了.

但沒想到事情不是想像中的那麼簡單~~~

大陸PG單靠著SA寫出的SPEC撰寫程式,
而這SPEC其實台灣的SA還寫的很心虛,
「我們開出來的規格真的可以被CODE出來嗎?」

心裡存在疑惑的SA + 對程式一知半解的PG = 架構零散的程式

平台架構沒有事前訓練,這是其一,
規格書的開法並沒有一個統一的例子,這是其二,
而這兩個就成了程式不穩定的因子.

PG的理解下,自作主張的少傳了些值,表面上看起來程式是OK了,
但測試幾個步驟下來,資料錯了,流程錯了,
麻煩的BUG一再的發生….

SA只好開DEBUG去逐行的去驗証程式….
USER的IR單一張張的開,時間緊迫,
一個星期…二個星期過去….
這樣一直改下去不是辦法,
SA向上表明程式的整個流程需重新整理一遍,這是個大工程,
但這是唯一的解決方法.

花了一個連續假期,PM兼平台組LEADER把整個流程順過一遍,
總算才步入軌道….

這當中,大陸PG對專案的幫助其實不高,
我們怕他們改錯程式,我們怕他們因修改同支程式而把SVN上的程式給蓋掉,
而大陸改的時效也不夠快….

最後,我們自己動手.

為什麼每個和大陸合作的專案的會是這樣的結果呢?

單眼皮女孩 之一:對眼

沒錯,端午節的連假,我又去相親了,
我雖是個怕麻煩的人,但遲遲找不到對象,
心急了,有親友介紹,也只能默默接受,多遠都得去!!
誰叫自己這麼”憨慢”…

說說這次的對象吧!! 女生是剛來台北時最照顧老爸的伯母介紹的,
我爸那時是伯母的房客,也因此認識伯母那的許多人,
只是那是40多年前的事…

我得知的女方的資訊是:彰化人、瘦、姓江、乖乖的,
年次、樣貌都不知道,只因為是伯母介紹的,在絕對的信任下,
火裡來水裡去…

只是我跟姓江的還真有緣…

這檔事已提了好一陣子,只因嫂子太忙,
伯母去了巴西後,無法常回台灣,動輒10幾萬的機票錢,
也不是說想回來就回來的.
因此台灣這改由嫂子當家,大小事由她定奪,
牽線的責任,嫂子也就一併擔上,
伯母只要回來當個現成的媒人婆就行…
怎麼說的好像一定會成….哈!!

端午節的連假剛好就有這個機會,順道把我載到彰化永勁,直接見女方的家人,
說不緊張是不可能的,只因沒問太多,所以連女方長什麼樣子都不知道,
就像等待開獎的心情吧!! 「期待愈高,失望就會愈大」我這麼告訴自己,
平常心吧!! 就當是交個朋友也不錯.

計劃總是趕不上變化,原本嫂子是想讓我先等女方忙完家族拜拜的事後,
在附近找個地方吃個飯,了解一下對方.

只是在見過女方爸媽後….
什麼!! 直接約出去,連車也借我開!?
驚嚇指數升高吧!! 這…太快了點吧!!

「那要去哪裡呢?」 我問,
「鹿港好了!!」她說,
「會不會開車」女方的爸爸問,
「會!!」我回答,

像是快問快答般,也因如此,我就開著他家的車,載著女生去了鹿港,
雖說是家鄉==,但這路都是她帶的,
故事總有個開始,鹿港行…..出發!!

一直沒提到對她的第一眼印象,
嗯…真的是很可愛的小女生,算是我的菜!!
個頭小小,又有著親切的笑容,只能說年輕真好….哈!!
(PS.你是個怪老頭)

以下就稱她為小沂吧!!

待續~~

[轉貼]XBMC for iPAD/iPhone 接近完美的全功能多媒體播放器

http://soft-farmer.blogspot.com/2011/02/xbmc-for-ipadiphone.html

在破解XBOX之後, XBMC小組發展出支援 Linux及widows 版本的XBMC, 最近發展出支援iPAD/iPhone的XBMC, 可以說是繼XBOX之後, 最大的突破.

XBMC在iPAD/iPhone的特點是:
1.它支援多國語言, 包括繁體中文, 介面及字幕
2.可以直讀隨身碟, 前提JB過, 且有camera kit
3.透過SMB設定,可以WiFi 直讀網路芳鄰
4.完全不用轉檔, 幾乎所有編碼都可以播放
5.當初XBMC在XBOX的功能, 除玩XBOX GAME不行之外, 幾乎都可以, 包括視訊, 看圖,音樂, 天氣, RSS, 網路電視,電台及各種Scripts功能
6.完全免費, 以後也絕不會在itunes store販售, 因為XBMC小組是自由軟體聯盟的成員之一, 與Microsoft及APPLE為敵.
7. 可以自己客製化 就像在XBOX的XBMC一樣 (XBMC程式在iPAD/iPhone的位置為 /private/var/stash/Applications.pwn/XBMC.app/) 高手可自行添加或修改, 在PC端以Total Command 外掛iPAD/iPhone附加檔, 把iPAD/iPhone當成網路芳鄰,最方便瀏覽,傳送與修改檔案)

詳細說明:http://xbmc.org

透過Cydia, 未JB的, 就不要多問了
新增來源: http://mirrors.xbmc.org/apt/ios/
然後至teamXBMC 來源 安裝XBMC-iOS即可

1. 介面中文語言設定: font選擇 arial based(該檔為unicode,有4MB, 非一般的arial), 然後字元集選Chinese Traditional (Big5)

2. 字幕設定: 字型選arial.ttf, 編碼選 Chinese Traditional (Big5)

3. 直讀網路芳鄰設定: 視訊>新增來源>瀏覽>windows網路(SMB)

4. 直讀隨身碟設定:用ifile 設定隨身碟捷徑到/private/var/mobile (設定方法請搜文), 然後 視訊>新增來源>瀏覽>主目錄 就可以看到隨身碟目錄

安裝完 XBMC for iPAD/iPhone之後, air video, Oplayer, AVplayer….其他播放軟體可以丟掉了