# 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 (檢視表)