存储过程与触发器:提高数据库性能与安全性的利器
title: 存储过程与触发器:提高数据库性能与安全性的利器
CREATE PROCEDURE GetCustomerInfo
@CustomerID INT
AS
BEGIN
SELECT *
FROM Customers
WHERE CustomerID = @CustomerID;
END
EXEC GetCustomerInfo @CustomerID = 1;
CREATE PROCEDURE GetCustomerBalance
@CustomerID INT,
@Balance DECIMAL(10,2) OUTPUT
AS
BEGIN
SELECT @Balance = SUM(Amount)
FROM Transactions
WHERE CustomerID = @CustomerID;
END
DECLARE @CustomerBalance DECIMAL(10, 2);
EXEC GetCustomerBalance @CustomerID = 1, @Balance = @CustomerBalance OUTPUT;
SELECT @CustomerBalance AS CustomerBalance;
CREATE TRIGGER trg_AfterInsert
ON Transactions
AFTER INSERT
AS
BEGIN
INSERT INTO AuditLog (TransactionID, Operation, OperationTime)
SELECT TransactionID, 'INSERT', GETDATE()
FROM inserted;
END
CREATE PROCEDURE SecureGetCustomerInfo
@CustomerID INT
AS
BEGIN
SELECT *
FROM Customers
WHERE CustomerID = @CustomerID;
END
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = 'SELECT * FROM Customers WHERE CustomerID = ' + @InputParameter; -- 错误的拼接查询
EXEC sp_executesql @SQL;
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = 'SELECT * FROM Customers WHERE CustomerID = @CustomerID';
EXEC sp_executesql @SQL, N'@CustomerID INT', @CustomerID = @InputParameter;
评论
发表评论