工作上突然有一個遞迴的需求
需求並不複雜, 用程式就能簡簡單單的寫完
但是SQL語法非常不熟練的我, 突然想說 來練練SQL語法好了 (加上懶得再改程式...)
所以就來研究了一下SQL的遞迴寫法
工作上突然有一個遞迴的需求
需求並不複雜, 用程式就能簡簡單單的寫完
但是SQL語法非常不熟練的我, 突然想說 來練練SQL語法好了 (加上懶得再改程式...)
所以就來研究了一下SQL的遞迴寫法
[T-SQL] Transaction 用法
Transaction(交易,大陸譯名:事务)
將多個資料庫操作的 SQL 指令 group 成一個執行的單元區塊( a single execution unit ),以特定的字串( Begin Transaction )來標記交易開始,一個交易可能包括了多個資料庫操作指令來完成,交易結束時的動作有兩個,若所有的操作全部執行成功,交易才算成功並提交變更( Commit Transaction ),若當中有發生錯誤失敗,則整個交易宣告失敗並回復所有變更( Rollback Transaction )。
例:
DECLARE @chk tinyint
1. DB > Task > Copy Database
2. Next
本文參考自 : http://bigone2000.pixnet.net/blog/post/56194164
1. 對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
2. 應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num is null
可以在num上設置預設值0,確保表中num列沒有null值,然後這樣查詢:
SELECT * FROM table WHERE Column LIKE '%test%'
SELECT * FROM table WHERE Contains(Column, "test")>0
需求說明:
1. 如果[A表格]裡面的[aa欄位]有值,比對[B表格的aa欄位]與[A表格的aa欄位]是否相符,相符才顯示B的資料。
2. 如果[A表格]的[aa欄位]沒有值,就不管B表格的aa欄位是否相符。
可用以下的方式:
SQL並沒有LastIndexOf語法,但可以用下述方式達到LastIndexOf的效果:
範例:從檔案路徑(C:\backup\2010\file123.txt)取得檔名(file123.txt),分隔字元為「\」。
RIGHT(filepath, CHARINDEX('\',REVERSE(filepath))-1)
指令語法說明:
如果你的資料庫,原本是放在SQL 2008 Express裡,後來要改放到客戶的空間,是使用SQL 2005的版本,在匯入時,會無法匯入,並且出現要先降級的訊息,可以利用以下方式,把版本改成2005版。
步驟:
進入Microsoft SQL Server Management Studio
資料庫按右鍵-->工作-->產生指令碼。
相信SQL語法的迴圈While大家都會用。
但遇到要將select過後的資料表的資料錄一筆一筆寫到新資料表時,該怎麼辦呢?
-- 宣告變數 DECLARE @變數1 VARCHAR(50) DECLARE @變數2 VARCHAR(50) DECLARE @變數3 VARCHAR(50) -- 指定變數, 視個人需要, 也可不指定初始值 SET @變數1 ='字串' SET @變數2 ='字串' SET @變數3 ='字串' -- 重點!! 宣告指標變數 DECLARE 指標變數 CURSOR FOR SELECT 欄位1 ,欄位2 ,欄位3 FROM TABLE1 -- 啟用指標變數 OPEN 指標變數 -- 以指標變數為基準點, 將取出的欄位值, 設定給我們自訂的變數 FETCH NEXT FROM 指標變數 INTO @變數1,@變數2,@變數3 WHILE @@FETCH_STATUS = 0 BEGIN insert into TABLE2(欄位1 ,欄位2 ,欄位3) values(@變數1,@變數2,@變數3) -- 指標變數往下移動, 並將取出的欄位值, 設定給我們自訂的變數 FETCH NEXT FROM 指標變數 INTO @變數1,@變數2,@變數3 END -- 關閉指標變數 CLOSE 指標變數 -- 釋放指標變數 DEALLOCATE 指標變數
語法:
SELECT [TABLE1].FIELD1,[TABLE2]FIELD2,[TABLE2]FIELD3
INTO [TABLE]
FROM [TABLE1] INNER JOIN [TABLE2] ON [TABLE1].FIELD1=[TABLE2].FIELD1
說明:
WHERE條件
SELECT 欄位
FROM 表格名
WHERE Condition(運算式)
當資料庫越來越肥大...就需要壓縮一下資料庫
GROUP BY應用,計算平均成績:
select 學號, avg(成績) as 平均成績
from 成績表
group by 學號
order by avg(成績) desc