ALTER TRIGGER Tri_TC ON T_C
FOR INSERT, DELETE
AS
BEGIN
SET XACT_ABORT ON;
DECLARE @InsCnt INT = (SELECT COUNT(*) FROM Inserted);
DECLARE @DelCnt INT = (SELECT COUNT(*) FROM Deleted);
IF @InsCnt > 0
INSERT INTO T_C2 SELECT * FROM Inserted;
ELSE IF @DelCnt > 0
DELETE T_C2 WHERE EXISTS (SELECT 1 FROM Deleted D WHERE D.CId = T_C2.CId);
END;
ALTER TRIGGER Tri_TC_Update ON T_C
FOR UPDATE
AS
BEGIN
DECLARE @DelCnt INT = (SELECT COUNT(*) FROM Deleted);
IF @DelCnt > 0
BEGIN
BEGIN TRANSACTION TriUpdate;
DECLARE @CName VARCHAR(100) = (SELECT CName FROM Inserted);
UPDATE T_C2 SET CName = @CName WHERE CId = (SELECT CId FROM Deleted);
IF @@ERROR <> 0
ROLLBACK TRANSACTION TriUpdate;
ELSE
COMMIT TRANSACTION TriUpdate;
END
END;
IF EXISTS (SELECT 1 FROM SysObjects WHERE Name = 'Pro_Fun' AND Type = 'P')
DROP PROCEDURE Pro_Fun;
GO
CREATE PROCEDURE Pro_Fun
AS
SELECT * FROM TableName;
GO
EXEC Pro_Fun;
DECLARE @QYBH VARCHAR(10);
DECLARE Cur CURSOR FOR SELECT DISTINCT QYBH FROM PJ_EnterpriseInput;
OPEN Cur;
FETCH NEXT FROM Cur INTO @QYBH;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT(@QYBH);
FETCH NEXT FROM Cur INTO @QYBH;
END
CLOSE Cur;
DEALLOCATE Cur;
ALTER VIEW CreateView AS SELECT QYBH FROM CreateView; -- 範例結構
ALTER FUNCTION FunName(@Str1 VARCHAR(10), @Str2 VARCHAR(10))
RETURNS VARCHAR(10)
AS
BEGIN
DECLARE @Ret VARCHAR(10) = 'False';
IF @Str1 > @Str2 SET @Ret = 'True';
RETURN @Ret;
END;
SELECT dbo.FunName('A', 'B');
DECLARE @QYBHTable TABLE (Id VARCHAR(32), QYBH VARCHAR(30)); INSERT INTO @QYBHTable SELECT Id, QYBH FROM PJ_EnterpriseInput; SELECT * FROM @QYBHTable;
SELECT
SUM(CASE WHEN Z.WatchName = N'註冊監理工程師' THEN 1 ELSE 0 END),
SUM(CASE WHEN Z.WatchName = N'Xinza' THEN 1 ELSE 0 END),
SUM(CASE WHEN Z.WatchName = N'監理員' THEN 1 ELSE 0 END)
FROM Zu_CorJl Z
RIGHT JOIN Zu_CorJlTemp T ON T.CorID = Z.CorID;
SET XACT_ABORT ON 確保錯誤時自動回滾BEGIN TRAN Name)便於嵌套管理CLOSE + DEALLOCATE 釋放資源CASE WHEN 聚合統計避免多次掃描表本文彙整 SQL Server 進階程式設計常用模式:觸發器(DML 三類)、交易控制、預存程序、游標、視圖、函數、表變數、條件聚合,可作為開發參考範本。