2013年9月3日 星期二

一些SQL代碼


<!-- 關閉計數器,新增一筆資料,取得新增資料的識別碼 start-->
set nocount on;insert into PointLog(Account,PointRuleID,Points,FromWeb) values('bbb',9,0,'c');select @@identity as id;
<!-- 關閉計數器,新增一筆資料,取得新增資料的識別碼 end-->


刪除資料庫中超過一個月的信件
DELETE FROM Serv_MailBox WHERE (CreateTime < CONVERT(DATETIME, getdate()-30, 102))


清除資料庫 LOG 檔
backup log uc91 with NO_LOG


同事告知SQL Server 2000某一資料庫的交易記錄檔已滿,要我清除之。查看資料庫檔案為550MB,但交易記錄檔卻12GB,使用如下語法:
BACKUP LOG DB_Name WITH TRUNCATE_ONLY
DBCC SHRINKFILE (DB_Name_log, 200)

卻出現錯誤訊息為:
伺服器: 訊息 8985,層級 16,狀態 1,行 1
無法將檔案 'DB_Name_log' 放到 sysfiles。
DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請聯絡您的系統管理員。

上網Google一下解決方式如下:
USE DB_Name_log
CHECKPOINT
DBCC SHRINKFILE(2, 200)

// UPDATE 使用 IN + 子查詢
UPDATE Msn_Modify SET Modify_Type = 'Mod'
WHERE INFO_PK
IN (
SELECT Msn_Modify.INFO_PK
FROM Msn_Modify INNER JOIN
Msn_Ticket ON Msn_Modify.INFO_PK = Msn_Ticket.INFO_PK AND
Msn_Modify.Modify_Date <> Msn_Ticket.Modify_Date
)

// INSERT 使用 IN + 子查詢
INSERT INTO Msn_Modify
(INFO_PK, ROUTE, Modify_Type, Modify_Date)
SELECT Msn_Ticket.INFO_PK, Msn_Ticket.ROUTE, 'Ins', Msn_Ticket.Modify_Date
FROM Msn_Ticket LEFT OUTER JOIN
Msn_Modify Msn_Modify_1 ON
Msn_Ticket.INFO_PK = Msn_Modify_1.INFO_PK
WHERE (Msn_Modify_1.INFO_PK IS NULL)

沒有留言:

張貼留言