# Command
###### tags: `MSSQL` `Command` `SQL` `SQLServer`
**1. CROSS APPLY (不含NULL) & OUTER APPLY(含NULL)**
APPLY 基本等同於JOIN
CROSS APPLY : CROSS JOIN 差別
CROSS JOIN 如果是子查詢表則不能使用前表的欄位帶入=>
SELECT * FROM A CROSS JOIN (SELECT *FROM B WHERE B.ID = A.ID)
這樣會語法錯誤,而CROSS APPLY可以因此基本上CROSS JOIN可以被CROSS APPLY取代
OUTER APPLY = LEFT OUTER JOIN
Advantage :
1.可將主表的欄位 帶入function 或是 查詢條件.ex2.ex3
ex1.
SELECT TB.COL1,TB.COL2,Alias.Col1,Alias.Col2......
FROM TABLE TB
CROSS APPLY
( VALUES ( [ COL1,COL2.....],[ COL3,COL4.....]) ) [Alias]
[COL_NAME1,COL_NAME2 ....]
ex2.
SELECT TB.COL1,TB.COL2,Alias.Col1,Alias.Col2......
FROM TABLE TB
CROSS APPLY
( funciton(tb.col....) ) [Alias]
ex3.
SELECT TB.COL1,TB.COL2,Alias.Col1,Alias.Col2......
FROM TABLE TB
CROSS APPLY
(Subquery [WHERE tb.col.... ]) [Alias]
**2. PIVOT & UNPIVOT**
**3.STUFF**
STUFF 函數會將字串插入另一個字串。 它會在第一個字串的開始位置刪除指定長度的字元,然後將第二個字串插入第一個字串的開始位置。
STUFF( character_expression , start , length , replaceWith_expression )
**4.FOR XML [RAW,AUTO,EXPLICIT,PATH] **
最上層的語句中只能使用在SELECT陳述句
子查詢則可以使用在UPDATE 、 INSERT 、 DELETE
RAW、AUTO 、EXPLICIT、PATH
將查詢結果產生一個 <資料列> 項目並以XML格式呈現,差別在於XML欄位外觀自訂程度
PATH可以指定欄位名為空字串搭配應用>將多筆資料合併為同一格欄位
**5.系統提供的view,可查詢Object內的關鍵字**
code-1
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE'%key_word%'
AND ROUTINE_TYPE ='PROCEDURE';
code-2
SELECT distinct sys.sysobjects.name, sys.sysobjects.type
FROM sys.sysobjects INNER JOIN syscomments
ON sys.sysobjects.id = sys.syscomments.id
WHERE sys.syscomments.text LIKE '%key_word%'
AND sys.sysobjects.type = 'P'
ORDER BY sys.sysobjects.NAME
常用type
FN : 純量函數
P:stored procedure (預存程序)
V:view (檢視表)