ืื ืืืฉืื ืืื ืื ืืกื ื ืชืื ืื ืืืืข ืืกืืคื ืฉื ืืืจ ืื ืงืืื ืฉืื ืฉืืืืชืืช SQL ืืคืืืจืืช ืืงืื ืืืืฉืื ืืืคืืืช ืืืขืืืช ืชืืืืงื. ืืืชื ืฆืืจืืฃ ืืืจืื ืืืคืืข ืืฉืืืฉื ืฉืืจืืชืื ืฉืื ืื. ืืืืืงื ืขืกืงืืช ืฉืฉืืืืช ืืฉืืืช ืืกื ืื ืชืื ืื ืืืืคืช ืืชืื ืืืืฉืื. ืืืื ืืืช ืืืืื ืฉืืืืจื ืืืืืช ื ืืืคืช ืืฉืืืช ืื ืชืื ืื ื ืืืคืช ืืืงืื ืืืช ืืืืคื ืื ืขืงืื ืขื ืืื ืงืื ืืืฉืื ืฉื ืืชื ืืขืงืืฃ. ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืืคืืืช ืืกืื ืื ืฉื ืืขืืืช ืขื ืืื ืืขืืจืช ืืืืืงืช SQL ืจื ืคืขืืืช, ืจืืืฉื ืืืืืื ืืงืจืืืืช ืืืืฆืืขืื ืืชืื ืืกื ืื ืชืื ืื, ืฉื ื ืืชื ืื ืื ืืืชื, ืืืืืืจ ืืจืกืืืช, ืืืืื ืืืชื ืืืืื ืืืชื ืืืืคื ืขืฆืืื ืืืืืฉืืืื ืฉืงืืจืืื ืื.
ืคืจืืฆืืืจื ืืืืืกื ืช ืืื ืงืืืฆื ืืขืืช ืฉื ืืืืจืืืช ืืจืืฉ ืฉื ืืฉืคืื SQL ืืืืืืกื ืื ืืืกื ืื ืชืื ืื ืืืืืฆืขืื ืืืืืื. ืืื ืืงืืืช ืคืจืืืจืื, ืืืืื ืืืืืงื ืืืืืื ืืืืืืจ ืชืืฆืืืช, ืคืจืืืจื ืคืื ืื ืงืืื ืกืืืืก. ืื ืืืื ืืฉืืืืชืืช ืื-ืืืง ืื ืฉืืืืช ืขื ืืื ืงืื ืืืฉืื, ืคืจืืฆืืืจื ืืืืืกื ืช ืขืืืจืช ื ืืชืื ืืืืจืืืช ืคืขื ืืืช, ืชืืื ืืช ืืืืฆืืข ืฉืื ืืืืืกื ืช ืืืืืื ืืืฉืืฉืช ืฉืื ืืื ืงืจืืื ืขืืงืืช, ืืืื ืืืืืช ืืช ืชืงืืจืช ืืงืืืคืืืฆืื ืฉ-SQL ืืื ืื ืืืืจ ืื ืฉื ื ืืจืื ืื. ืืืจืื ืื ืืืกื ืืื ืคืจืืฆืืืจืืช ืืืืืกื ืืช, ืืชื ืืืฉืชืืฉ ืืื, ืืืฆื ืื ืืืืคืืช ืืืืื, ืืืฆื ืื ืืฉืคืืขืืช ืขื ืืืืฆืืขืื ืืืืฆื ืื ืื ืืืชื ืืฉืื ืืืืืช ืืชืืืช ืืืฉืชืจืขืืช ืขื ืคื ื ืื ืืืืจ ืื ืชืื ืื.
ืืืงืฃ ืื ืฉืื ืื ืืืกื ืื ืชืื ืื ืืคื ื ืฉืืื ืืืคืขื
SMART TS XL ืืืคื ืชืืืืืช ืฉื ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืื ืืื ืืช ื-SQL, COBOL, Java ื-Python.
ืืืืข ื ืืกืฃืืื ืคืจืืฆืืืจื ืืืืืกื ืช?
ืคืจืืฆืืืจื ืืืืืกื ืช ืืื ืฉืืจื ืฉืขืืจื ืงืืืคืืืฆืื ืืจืืฉ, ืืืืืืกื ืช ืืืกื ื ืชืื ืื ืืืกื ืื ืงืจืืช ืืฉื ืขื ืคืจืืืจืื ืืืคืฆืืื ืืืื. ืื ืืข ืืกื ืื ืชืื ืื ืงืืืคืืืจ ืืืชื ืคืขื ืืืช, ืืืืกื ืืืืืื ืืช ืชืืื ืืช ืืืืฆืืข ืืืฉืชืืฉ ืืืืฉ ืืชืืื ืืช ืื ืืื ืงืจืืื ืขืืงืืช, ืชืื ืืืื ืขืืช ืืืืืืจ ืื ืืชืื-ืงืืืคืืืฆืื-ืืืคืืืืืืฆืื ืฉืฉืืืืชืืช SQL ืื-ืืืง ืืืจืฉืืช ืืื ืคืขื ืฉืื ืคืืขืืืช.
SQL
-- SQL Server: basic stored procedure
CREATE PROCEDURE GetCustomerOrders
@CustomerId INT,
@StartDate DATE,
@EndDate DATE
AS
BEGIN
SET NOCOUNT ON;
SELECT
o.OrderId,
o.OrderDate,
o.TotalAmount,
o.Status
FROM Orders o
WHERE o.CustomerId = @CustomerId
AND o.OrderDate BETWEEN @StartDate AND @EndDate
ORDER BY o.OrderDate DESC;
END;
GO
-- Calling the procedure
EXEC GetCustomerOrders
@CustomerId = 12345,
@StartDate = '2026-01-01',
@EndDate = '2026-06-30';
ืืืืฉืื ืืขืืื ืื ืืืชื SQL ืืฉืืจืืช. ืืื ืงืืจื GetCustomerOrders ืขื ืคืจืืืจืื. ืืกื ืื ืชืื ืื ืืืคื ืืฉืืจ.
ืคืจืืฆืืืจื ืืืืืกื ืช ืืขืืืช ืชืฆืืื ืืขืืืช ืคืื ืงืฆืื
ืฉืืืฉื ืืืืืืงืืื ืฉื ืืกื ื ืชืื ืื ืืชืืืืืื ืืขืชืื ืงืจืืืืช. ืืืืื ืฉืืืื ืืืืืื ืืื ืืื:
| ืืคืฅ | ืืืืจืื | ืืงืื ืคืจืืืจืื | ืืืื ืืฉื ืืช ื ืชืื ืื | ืชืืื ืืช ืืืฆืืข ืืืืืกื ืช ืืืืืื | ืืื ืืื |
|---|---|---|---|---|---|
| ื ืืื ืืืืืกื | ืงืืืฆืืช ืชืืฆืืืช, ืคืจืืืจื ืคืื, ืงืืื ืืืืจื | ืืฉ | ืืฉ | ืืฉ | ืืืืืงื ืืืจืืืช, ืคืขืืืืช DML, ืืืืคืช ืืืืื |
| ืืฆืคืื | ืงืืืฆืช ืชืืฆืืืช ืืืืืช (ืืื ืืืื) | ืื | ืื (ืืืจื ืืื) | ืืืงื | ืคืืฉืื ืฉืืืืชืืช SELECT, ืืืืื ืืจืืช ืืขืืืื |
| ืคืื ืงืฆืื ืกืงืืจืืช | ืขืจื ืืืื | ืืฉ | ืื | ืื | ืืืฉืืืื ืฉื ืขืฉื ืืื ืฉืืืืฉ ืืืืจ ืืจืฉืืืืช SELECT |
| ืคืื ืงืฆืื ืืขืืช ืขืจื ืืืื | ืงืืืฆืช ืชืืฆืืืช | ืืฉ | ืื | ืืืงื | ืชืฆืืืืช ืคืจืืืจืืืช, ืืืฉืืืื ืืืืืจื ืงืืืฆืืช |
ืืืื ืืจืืื: ืืฉืชืืฉื ืืชืฆืืื ืืืฉืจ ืืชื ืจืืฆืื ืืคืฉืื ืฉื โโSELECT ืืฉืืืืฉ ืืืืจ. ืืฉืชืืฉื ืืคืจืืฆืืืจื ืืืืืกื ืช ืืืฉืจ ืืชื ืืงืืงืื ืืคืจืืืจืื, ืืืืืงื ืืืชื ืืช, ืฉืื ืื ื ืชืื ืื ืื ืืืืคืช ืืืืื. ืืฉืชืืฉื ืืคืื ืงืฆืื ืืืฉืจ ืืชื ืืงืืงืื ืืืืฉืื ืฉืืืืืจ ืขืจื ืื ืืืื ืืืืื ืืืืจ ืืืชื ืขื SQL ืืืจ.
ืืจืืขืช ืืืชืจืื ืืช ืืืจืืืืื
ืืืฆืืขืื: ืงืื-ืงืืืคืืืฆืื ืืืืกืื ืืืืืื ืชืืื ืืืช
ืืืฉืจ SQL Server, PostgreSQL ืื Oracle ืืงืืืื ืงืจืืื ืืคืจืืฆืืืจื ืืืืืกื ืช, ืื ืืืืงืื ืื ืงืืืืช ืชืืื ืืช ืืืฆืืข ืืืืืกื ืช ืืืืืื ืขืืืจ ืคืจืืฆืืืจื ืื. ืื ืงืืืืช ืชืืื ืืช ืืื, ืื ืืืฆืขืื ืืช ืืชืืืื ืืืืคื ืืืืื. ืื ืื, ืื ืงืืืคืื ืืช ืืคืจืืฆืืืจื, ืืืฆืจืื ืชืืื ืืช ืืืฆืืข, ืืืืกื ืื ืืืชื ืืืืืื ืืืืฆืขืื ืืืชื. ืืื ืืงืจืืืืช ืืืืืช, ืืชืืื ืืช ืืืืืืกื ืช ืืืืืื ืื ืืฆืืช ืฉืื.
ืฉืืืืชืืช SQL ืื-ืืืง, ืฉืืืืชืืช ืืฉืืจืฉืจืืช ืืืจืืืืช ืื ืฉืืืืช ืืงืื ืืคืืืงืฆืื, ืขืฉืืืืช ืืขืืืจ ืงืืืคืืืฆืื ืืืืฉ ืืื ืงืจืืื, ืืืชืื ืืืกื ืื ืชืื ืื ืืืืื ื ืืฉืืืืชื. ืขืืืจ ืฉืืืืชืืช ืืชืืืจืืช ืืืืื ืื ืงืจืืืช ืืืคื ืคืขืืื ืืฉื ืืื, ืชืงืืจืช ืืงืืืคืืืฆืื ืืื ืืฉืืขืืชืืช.
SQL
-- Demonstrating plan reuse in SQL Server
-- Check if a plan exists for a procedure
SELECT
qs.execution_count,
qs.total_elapsed_time / qs.execution_count AS avg_elapsed_ms,
qs.total_logical_reads / qs.execution_count AS avg_logical_reads,
SUBSTRING(qt.text, 1, 100) AS procedure_text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
WHERE qt.text LIKE '%GetCustomerOrders%'
ORDER BY qs.execution_count DESC;
ืชืขืืืจืช ืจืฉืช ืืืคืืชืช ืืื ืืชืจืื ืืืืฆืืขืื ืืฉื ื. ืืืงืื ืืฉืืื ืฉืืืืชืช SQL ืืืจืืืช ืืช 30 ืฉืืจืืช ืืืืืฉืื ืืืกื ืื ืชืื ืื ืืื ืงืจืืื, ืืืืฉืื ืฉืืื ืงืจืืื ืงืฆืจื ืืคืจืืฆืืืจื. ืขืืืก ืืจืฉืช ืืื ืืืื. ืืกื ืื ืชืื ืื ืืืฆืข ืืช ืืืืฉืื ืืืื ืืฆื ืืฉืจืช ืืืืืืจ ืจืง ืืช ืงืืืฆืช ืืชืืฆืืืช.
ืืืืื: ืืืืืช ืืืฉื ืืฉืืจื ืืืืื
ืืื ืืืชืจืื ืฉื ืชืื ื SC ืืืคืฉืื ืกืคืฆืืคืืช, "ืืืฆื ืืืฉืชืืฉ ืืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืื ืืืืืื ืืืฉื ืืฉืืจื ืื ืชืื ืื ืืืฉืคืจ ืืช ืืืืืช ืืกื ืื ืชืื ืื." ืืื ืื ืื ืืื ืคืฉืื ืืืืง.
ืืขื ืงืช ืืจืฉืืืช ืืืฉืชืืฉื ืืคืืืงืฆืื ืขื ืคืจืืฆืืืจืืช ืืืืืกื ืืช. ืื ืืขืช ืืืฉื ืืฉืืจื ืืืืืืืช ืืืกืืกืืืช. ืืืฉืชืืฉ ืืืื ืืงืจืื ืืคืจืืฆืืืจื ืื ืืื ื ืืืื ืืืฆืข ืฉืืืืชื, ืืืืกืืฃ, ืืขืืื ืื ืืืืืง ืืืืืื ืืฉืืจืืช.
SQL
-- Create a role for application users
CREATE ROLE AppReadRole;
-- Grant execute on the procedure
GRANT EXECUTE ON GetCustomerOrders TO AppReadRole;
-- Deny direct table access
DENY SELECT ON Orders TO AppReadRole;
DENY SELECT ON Customers TO AppReadRole;
-- The user can now:
-- EXEC GetCustomerOrders @CustomerId=123, ... -> works
-- SELECT * FROM Orders WHERE ... -> ACCESS DENIED
ืื ืืขืช ืืืจืงืช SQL ืืื ืืชืจืื ืืืืืื ืืฉื ื. ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืืฉืชืืฉืืช ืืงืื ืคืจืืืจืืืฆืื ืืืงืื ืืื ืืืช SQL ืืื ืืืช ืืืื ืืช ืืืืคื ืืืขื ืืคื ื ืืืจืงืช SQL. ืขืจื ืืคืจืืืจ ืืืืคื ืืืืืจื, ืืื ืืงืื SQL.
SQL
-- VULNERABLE: dynamic SQL built from user input
DECLARE @sql NVARCHAR(500);
SET @sql = 'SELECT * FROM Customers WHERE Name = ''' + @UserInput + '''';
EXEC(@sql);
-- An attacker can inject: '; DROP TABLE Customers; --
-- SAFE: parameterized stored procedure
CREATE PROCEDURE GetCustomerByName
@CustomerName NVARCHAR(100)
AS
BEGIN
SELECT CustomerId, Name, Email
FROM Customers
WHERE Name = @CustomerName; -- @CustomerName is a literal, not SQL
END;
ืืืืืจ: ืคืจืืฆืืืจื ืืืืืกื ืช ืฉืืื ื SQL ืืื ืื ืืืืคื ืคื ืืื ืืืืฆืขืืช
EXEC()orsp_executesqlืขื ืฉืจืฉืืจ ืืืจืืืืช ืฉื ืงืื ืืฉืชืืฉ ืคืืืข ืืืืืง ืืื SQL ืืื ืื ืืจืืช ืืืืฉืื. ืคืจืืืจืืืฆืื ืืืืืช ืืืจืืื ืืช ืขืฆืื ืืื SQL ืืื ืื ืฉื ืื ื ืืชืื ืืคืจืืฆืืืจื.
ืชืืืืงื: ืฉืื ืื ืืื, ืื ืืืืฉืืืื ืืขืืืื ืื
ืืืฉืจ ืฉืื ืืืื ืืืืืืงื ืขืกืงืืช, ืืืื ืืืฉืื ืืก, ืจืืืช ืื ืื, ืืจื ืกืคืืจืืฆืืืช ื ืชืื ืื ืื ืืจืฉืืช ืืฆืืืช, ืคืจืืฆืืืจื ืืืืืกื ืช ืืจืืืช ืืช ืืืืืืงื ืืื ืืืงืื ืืื. ืื ืืืฉืื ืฉืงืืจื ืืคืจืืฆืืืจื ืืงืื ืืช ืืืชื ืืืืช ืืืขืืืื ืช ืืืืคื ืืืืืืื, ืืืื ืืืจืืฉ ืคืจืืกื ืืืืฉ.
SQL
-- Before: discount logic duplicated in three application services
-- After: centralized in one stored procedure
CREATE PROCEDURE CalculateOrderTotal
@OrderId INT,
@DiscountedTotal DECIMAL(10,2) OUTPUT
AS
BEGIN
DECLARE @Subtotal DECIMAL(10,2);
DECLARE @CustomerTier NCHAR(1);
SELECT @Subtotal = SUM(li.Quantity * li.UnitPrice),
@CustomerTier = c.Tier
FROM OrderLineItems li
JOIN Orders o ON o.OrderId = li.OrderId
JOIN Customers c ON c.CustomerId = o.CustomerId
WHERE li.OrderId = @OrderId
GROUP BY c.Tier;
-- Business rule: Gold customers get 15%, Silver get 8%, Standard get 0%
SET @DiscountedTotal = @Subtotal * CASE @CustomerTier
WHEN 'G' THEN 0.85
WHEN 'S' THEN 0.92
ELSE 1.00
END;
END;
ืฉื ื ืืช ืืืืื ืืื ืื ืืืงืื ืืื. ืื ืฉืืืฉืช ืฉืืจืืชื ืืืคืืืงืฆืืืช ืฉืงืืจืืื CalculateOrderTotal ืืฉืงืคื ืืืืคื ืืืืื ืืช ืืชืขืจืืคืื ืืืืฉืื.
ืื ืงืคืกืืืฆืื ืขื ืคืจืืืจื ืคืื ืืืืคืื ืืฉืืืืืช
ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืืืืจืืช ืขืจืืื ืืจืืืื ืืจื ืคืจืืืจื ืคืื ืืืขืืืจืืช ืืช ืกืืืืก ืืขืืืื ืืืืฆืขืืช ืงืืื ืืืืจื, ืื ืฉืืืคืฉืจ ืืคืืกื ืืื ืืจืืงืฆืื ืขืฉืืจืื ืืืชืจ ืืืฉืจ SELECT ืคืฉืื.
SQL
CREATE PROCEDURE InsertOrder
@CustomerId INT,
@OrderDate DATE,
@NewOrderId INT OUTPUT,
@StatusCode INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION;
INSERT INTO Orders (CustomerId, OrderDate, Status)
VALUES (@CustomerId, @OrderDate, 'PENDING');
SET @NewOrderId = SCOPE_IDENTITY();
SET @StatusCode = 0; -- success
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
SET @StatusCode = ERROR_NUMBER();
SET @NewOrderId = -1;
END CATCH;
END;
-- Usage
DECLARE @OrderId INT, @Status INT;
EXEC InsertOrder
@CustomerId = 5001,
@OrderDate = '2026-07-15',
@NewOrderId = @OrderId OUTPUT,
@StatusCode = @Status OUTPUT;
IF @Status <> 0
PRINT 'Insert failed with error: ' + CAST(@Status AS VARCHAR);
ELSE
PRINT 'Created order: ' + CAST(@OrderId AS VARCHAR);
ืืืคืืืืืืฆืื ืฉื ืืืฆืืขืื: ืื ืชืืื ืืช ืืืืฆืืข ืืืืจืช ืื
ืชืืื ืืช ืืืืฆืืข ืืื ืจืืฉืื ืฉื ืื ืืข ืืกื ืื ืชืื ืื ืืืฆื ืืื ืืืจ ืืืฆืข ืฉืืืืชื, ืืืื ืืื ืืงืกืื ืืฉืชืืฉื ืื, ืืืื ืืืืืจืืชื ืฆืืจืืฃ ืืื ืืืจ, ืืืื ืฉืืจืืช ืืื ืืขืจืื ืืื ืฉืื. ืขืืืจ ืคืจืืฆืืืจื ืืืืืกื ืช ืื ืงืจืืช ืืืคื ืคืขืืื ืืืื, ืชืืื ืืช ืืืืฆืืข ืืื ืืื ืืืืืื ืืขืืงืจื ืืืขืืืช ืืืฆืืขืื.
SQL
-- Enable actual execution plan in SQL Server
-- Then run:
EXEC GetCustomerOrders
@CustomerId = 12345,
@StartDate = '2026-01-01',
@EndDate = '2026-06-30';
-- Check for parameter sniffing issues
-- (cached plan was optimized for a different parameter distribution)
EXEC GetCustomerOrders
@CustomerId = 99999, -- rare customer with very few orders
@StartDate = '2026-01-01',
@EndDate = '2026-06-30'
WITH RECOMPILE; -- forces fresh plan for this call
ืจืื ืคืจืืืจืื ืืื ืืขืืืช ืืืืฆืืขืื ืื ืคืืฆื ืืืืชืจ ืฉื ืคืจืืฆืืืจืืช ืืืืืกื ืืช. SQL Server ืืืืกื ืืืืืื ืืช ืชืืื ืืช ืืืืฆืืข ืฉื ืืฆืจื ืขืืืจ ืงืืืฆืช ืืคืจืืืจืื ืืจืืฉืื ื ืฉืื ื ืงืจืืช ืืคืจืืฆืืืจื. ืื ืงืจืืืืช ืขืืงืืืช ืืฉืชืืฉืืช ืืขืจืื ืคืจืืืจืื ืฉืื ืื ืืืื, ืืงืื ืขื 50,000 ืืืื ืืช ืืขืืืช ืืงืื ืขื 2 ืืืื ืืช, ืืชืืื ืืช ืืืืืืกื ืช ืืืืืื ืขืฉืืื ืืืืืช ืชืช-ืืืคืืืืืืช ืืืื ืขืืืจ ืขืจืืื ืืื.
ืืกืืจืืืืืช ืืคืืชื: OPTIMIZE FOR ืจืื ืืืืคืืืืืืฆืื ืขืืืจ ืขืจื ืคืจืืืจ ืืืืฆื; WITH RECOMPILE ืืจืืช ืืคืจืืฆืืืจื ืืื ืืืฆืืจ ืชืืื ืืช ืืืฉื ืืื ืงืจืืื (ืืงืจ, ืื ืืขืื ืืืฉืจ ืืชืคืืืืช ืืคืจืืืจืื ืืฉืชื ื ืืืื); ืืงืฆืืช ืืฉืชื ืื ืืงืืืืช ืืชืืืืช ืืคืจืืฆืืืจื ืืื ืืื ืืข ืจืืจืื (sniffing):
SQL
CREATE PROCEDURE GetCustomerOrders
@CustomerId INT,
@StartDate DATE,
@EndDate DATE
AS
BEGIN
-- Local variable trick: prevents parameter sniffing
DECLARE @LocalCustomerId INT = @CustomerId;
DECLARE @LocalStart DATE = @StartDate;
DECLARE @LocalEnd DATE = @EndDate;
SELECT o.OrderId, o.OrderDate, o.TotalAmount
FROM Orders o
WHERE o.CustomerId = @LocalCustomerId
AND o.OrderDate BETWEEN @LocalStart AND @LocalEnd;
END;
ืฉืืืืช ืขืืืื ืืืืืฆืืช: ืจืฉืืืช ืืืืงื
ืืืงืื ืขืงืจืื ืืช ืืืืืื, ืืื ืื ืืคืจืงืืืงืืช ืฉืืืคืืืช ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืื ืืชื ืืช ืืชืืืืงื ืืงื ื ืืืื ืืืื:
ืืชื ืฉืืืช ืืืจืืื
- ืืฉืชืืฉื ืืืืกืืื ืขืงืืืช ืืืชื ืฉืืืช:
usp_ืงืืืืืช ืขืืืจ ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืขื ืืื ืืืฉืชืืฉ,sp_ืฉืืืจืืช ืื ืืื ืืขืจืืช - ืืชื ืฉื ืื ืืืื ืืคื ืคืืขื + ืฉื ืขืฆื:
GetCustomerOrders,InsertPaymentRecord,UpdateInventoryCount - ืงืืฅ ืคืจืืฆืืืจืืช ืงืฉืืจืืช ืืกืืืื:
Sales.GetCustomerOrders,Inventory.UpdateStock
ืืื ื ืงืื
- ืืชืื ืื ืืืื ืขื
SET NOCOUNT ONืืื ืืืฉืชืืง ืืืืขืืช ืกืคืืจืช ืฉืืจืืช ืฉืืงืืืืช ืขืืืืื ืืคืจืฉ ืืืืคื ืฉืืื - ืืฉืชืืฉ
BEGIN TRY / BEGIN CATCHืืืืงืื ืขื ืืคืืจืฉBEGIN TRANSACTION / COMMIT / ROLLBACK - ืืืื ืขื ืืกืื ืื ืขืืืจ ืคืขืืืืช ืงืืืฆื, ืืชืื ืืืืฉ ื-SQL ืืืืกืก ืงืืืฆื ืืืืืช ืืืคืฉืจ
- ืืื ืืืฉืชืืฉ
SELECT *, ืชื ืฉื ืืื ืขืืืื ืฉืืคืจืืฆืืืจื ืืืืืจื
ืืืืื
- ืืขื ืงืช ืืจืฉืืืช ืืืฆืืข ืขื ืคืจืืฆืืืจืืช; ืื ืืขืช ืืืฉื ืืฉืืจื ืืืืื ืขืืืจ ืชืคืงืืื ืืืฉืืืื
- ืืืื ืขื ื-SQL ืืื ืื ืฉื ืื ื ืืงืื ืืฉืชืืฉ ืืชืื ืคืจืืฆืืืจืืช
- ืืฉืชืืฉ
sp_executesqlืขื ืฉืืืืชืืช ืคืจืืืจืืืช ืื SQL ืืื ืื ืืื ืืืชื ื ืื ืข
ืืืฆืืข
- ืืืืงืช ืชืืื ืืืช ืืืฆืืข ืขืืืจ ืกืจืืงืืช ืืืืืืช ืืืืืืืช ืืืืืืช, ืืืกืคืช ืืื ืืงืกืื ืืืืืช ืืฆืืจื
- ืืืืงื ืขื ืขืจืื ืคืจืืืจืื ืืืืฆืืื ืขืืืจ ืคืจืืฆืืืจืืช ืืจืืืฉืืช ืืืกืจืื
- ืฆื
sys.dm_exec_procedure_statsืขืืืจ ืืืืืื ืืขืื ืืืฆืืข ืืืื ืื ืืฉื ืืื ืืจืื
ืชืืขืื
- ืืืกืฃ ืืขืจื ืืืืชืจืช ืืื ืคืจืืฆืืืจื: ืืืจื, ืคืจืืืจืื, ืขืจืืื ืืืืืจืื, ืืืืจ, ืฉืื ืื ืืืจืื
- ืืืื ืขืกืงืืื ืืชืขืืื ืืืงืืืืื ืืืืืืงืช ืืคืจืืฆืืืจืืช, ืื ืจืง ืื ื-SQL ืขืืฉื, ืืื ืืืืข
ื ืืืื ืืชืืืช ืืคืจืืฆืืืจื ืืืืืกื ืช
ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืื ื ืงืืืืืช ืืืืืื. ืคืจืืฆืืืจื ืฉืงืืจืืช ืืืืฉ ืืืืืืช, ืงืืจืืช ืืฉืชื ืคืจืืฆืืืจืืช ืืืจืืช, ืื ืงืจืืช ืขื ืืื ืชืจืืกืจ ืฉืืจืืชื ืืืฉืืืื, ืืื ืจืืื ืืขื ืชืืืืืช ืืืจืืืืช ืืื ืฉืืืฉืช ืืืืืื ืื: ืืื ืืื ืชืืืื, ืื ืชืืื ืื, ืืื ืืื ืืืืงืช ืขื ืคืจืืฆืืืจืืช ืืืจืืช.
ืืืฉืจ ืขืืืื ืืืืื ืืฉื ื ืกืื, ืืฉ ืืืืืง ืื ืคืจืืฆืืืจื ืืืคื ื ืืขืืืื ืื. ืืืฉืจ ืคืืจืื ืืคืื ืฉื ืคืจืืฆืืืจื ืืฉืชื ื, ืืฉ ืืืืช ืื ืงืืจื. ืืืฉืจ ืคืจืืฆืืืจื ื ืฉืงืืช ืืฉืื ืื, ืงืืืฆืช ืืงืืจืืื ืืืืื ืงืืืขืช ืืช ืืืงืฃ ืืฉืื ืื ืืืช ืืืืงืืช ืืจืืจืกืื ืื ืืจืฉืืช.
ืกืืื ืชืืืช ืฉืืฉืืืื:
- ืชืืืืืช ืืืืืืงืืื: ืืืืืืช, ืชืฆืืืืช, ืคืื ืงืฆืืืช ืืคืจืืฆืืืจืืช ืืืจืืช ืฉืืคืจืืฆืืืจื ืืคื ื ืืืืื
- ืชืืืืืช ืืืชืงืฉืจ: ืงืื ืืืฉืื, ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืืจืืช ืืืฉืืืืช ืืชืืืื ืืช ืืงืืจืืืช ืืคืจืืฆืืืจื ืื
- ืชืืืืืช ืกืืืื: ืืืืืืช ืืืืืจืืช ืขืืืืืช ืฉืกืืื ืืคืจืืืจืื ืืจืฉืืืืช ื-SELECT ืฉื ืืคืจืืฆืืืจื ืืืืืื ืืืชืืื ืืืืื
- ืชืืืืืช ืขืกืงืืืช: ืคืจืืฆืืืจืืช ืฉืืืืงืืช ืืช ืืืื ืืขืกืงื ืขื ืืงืืจืืื ืฉืืื ืื ืื ืขื ืื
ืืืกื ื ืชืื ืื ืงืื ืขื ืขืฉืจ ืคืจืืฆืืืจืืช ืืืืืกื ืืช, ื ืืชื ืืขืงืื ืืื ืืช ืืืจ ืชืืืืืช ืืื. ืืืกื ื ืชืื ืื ืขื ืืืืช ืคืจืืฆืืืจืืช ืืืืืกื ืืช, ืืืจ ื ืคืืฅ ืืกืืืืืช ืืจืืื ืืืช ืืื ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืืืืืช ืฉื ืื ืฉื ืืืืืงื ืขืกืงืืช, ืืขืงื ืืื ื ืืืจ ืชืืืืืช ืืืืฆืจ ืืคืืช ืื ืฉืืืืช ืืืืจืืขืื ืืงืฉืืจืื ืืฉืื ืื.
ืืื SMART TS XL ื ืืืื ืชืืืืืช ืฉื ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืงื ื ืืืื ืืจืืื ื
SMART TS XL"S ื ืืชืื ืงืื ืกืืื ืื ืชื ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืฉื SQL ืืฆื ืชืืื ืืืช COBOL, ืฉืืจืืชื Java, ืฆืื ืืจืืช Python ืืจืืืืื ืืืจืื ืืืงืืืืื ืืื ืืจืืงืฆืื ืขื ืืืชื ืืกื ื ืชืื ืื. ืื ืืชืื ืืืืืื ืืืืฆืจ ืืืื ืืื ื ืืืฆื ืฉืคืืช: ืื ืจืง ืืชืืืืืช ืืื SQL ื-SQL ืืชืื ืืกื ืื ืชืื ืื, ืืื ืืช ืืฉืจืฉืจืช ืืืืื ืืงืื ืืืคืืืงืฆืื ืืจื ืืคืจืืฆืืืจื ืืืืืืกื ืช ืืขื ืืืืืืืช ืืืกืืกืืืช ืืืืจื.
ืืืืืช ืืืคืื ืืชืืืช ืฉื ืืืืฉืืืื ืืื ื ืืช ืืจืฃ ืืงืืจื ืืืื: ืืืื ืชืืื ืืืช COBOL ืืฉืชืืฉืืช ื-SQL ืืืืืข ืฉืงืืจื ืืืืืืืช ืฉืืืขืืืช ืคืจืืฆืืืจืืช ืืืืืกื ืืช, ืืืื ืฉืืจืืชื Java ืงืืจืืื ืืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืจื JDBC, ืืืื ืขืืืืืช ืืฆืืื ืฉื JCL ืืคืขืืืืช ืืื ืฉืืจืืช ืฉื ืืกื ื ืชืื ืื ืฉืืจืืฆืืช ืคืจืืฆืืืจืืช ืืืืืกื ืืช. ืืืฉืจ ืืืชืืื ืื ืืืชื ืืืืช ืฉื ืคืจืืฆืืืจื ืืืืืกื ืช ืืฉืชื ืืช, ืืคืช ืืชืืืช ืืฆืืื ืื ืงืืจื ืืื ืฉืคื, ืืช ืืืืงืฃ ืืืื ืฉื ืื ืฉืฆืจืื ืืืืืง ืืคื ื ืฉืืฉืื ืื ืขืืืจ ืืืืฆืืจ.
ืืฉืืืื ื ืืชืื ืืฉืคืขืืช ืืืืืืช ืืืคืืช ืืช ืืคืช ืืชืืืช ืืื ืื ืืชื ืช ืืคืขืืื ืืฆืืจื ืชืื ืื ืฉืื ืืืื: ืืืฆืืข ืฉืื ืื ื CalculateOrderTotal ืืืงืื ืจืฉืืื ืืคืืจืืช ืฉื ืื ืจืืื ืฉืงืืจื ืื, ืื ืืืื ืฉืืื ืงืืจื ืืืืชื, ืืื ืคืจืืฆืืืจื ืืืืจื ืืืจื ืฉืืื ืืคืขืื. ืื ืืืคื ืืช ืืฉืืื "ืื ืื ืืฉืืืจ?" ืืชืจืืื ืืืืข ืฉืืื ืืืื ืืืงืฃ ืืืื ื ืืืืืกืก ืจืืืืช.
ืืฉืืืื ืืืคืืฉ ืืจืืื ื ืืืืืืช ืืืคืืช ืืช ืืืื ืืชืืืช ืืืื ืื ืืชื ืืฉืืืืชื: ืืฆื ืื ืคืจืืฆืืืจื ืืืืืกื ืช ืฉืงืืจืืช ื Ordersืื ืืชืงืฉืจ ืฉื GetCustomerOrders, ืื ืคืจืืฆืืืจื ืฉืืฉื ื ืขืืืื ืกืคืฆืืคืืช, ืชืื ืฉื ืืืช, ืขื ืคื ื ืฉืื ืืกื ื ืชืื ืื ืืื ืืืื.
ืขืืืจ ืฆืืืชืื ืืื ืืืื ืืืืจื ืืืฆืื ืืืจืฉืช ืชืืื ืืืช ืฉืืื ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืงืืืืืช ืขืฉืจืืช ืฉื ืื ืฉื ืืืืืงื ืขืกืงืืช ืฉืืฉ ืืฉืืจ ืืืืื ืืืขืืจื, SMART TS XLืื ืืชืื ืฉื ืืกืคืง ืืช ืืชืืขืื ืืืื ื ืฉืืืคื ืืช ืืืืืืงื ืื ืืชื ืช ืืืืืืฅ ืืืช ืจืฆืฃ ืืืืืจื ืื ืืชื ืืชืื ืื.
ืฉืืืช ืืกื ืื ืชืื ืื ืฉืืจืืืืื ืืช ืืงืืื
ืคืจืืฆืืืจืืช ืืืืืกื ืืช ืืื ื ืฉืจืื ืืขืืื ืืกืื ื ืชืื ืื ืงืืื. ืื ืืืงืื ืื ืืื ืืืฆืื ืื ืืืืืงื ืฉืฉืืืืช ืืืกื ืื ืชืื ืื: ืืืืคืช ืืืืื ืฉืืืืืช ืืืืืช ืขืงืืืช ืืื ืงืฉืจ ืืืืฉืื ืฉื ืืืฉ ืื ืชืื ืื, ืฉืืืืชืืช ืจืืืฉืืช ืืืืฆืืขืื ืฉื ืื ืืช ืืชืืื ืืืช ืืืฆืืข ืืืืืืกื ืืช ืืืืืื, ืืืืื ืขืกืงืื ืฉืฆืจืืืื ืืืชืขืืื ืคืขื ืืืช ืืืืชืคืฉื ืืื ืืงืื.
ืืืืืืืช ืืื ื ืืฉืชืืฉืช ืืคืจืืฆืืืจืืช ืืืืืกื ืืช, ืืื ืืืคืฉืจืช ืืื ืืืืื ืืจืฉืช ืชืืืช ืื ืืชืืขืืช ืืื ืืืืคื ืฉืืฃ ืืื ืื ืืืื ืืืืืื. ืคืจืืฆืืืจื ืืืืืกื ืช ืฉืืืฆืขืช ืืืฉืื ืขืกืงื ืงืจืืื ืื ืืื ืงืืจืืื ืืชืืขืืื, ืืื ืืขืจืช ืืืชืจืช ืืืกืืืจื ืืช ืืืจืชื, ืืืื ื ืืชืื ืืฉืคืขื ืืคื ื ืืฉืื ืื ืืื ื ืื ืืื ืงืฉืจ ืืืื ืืื ืืื ื ืืชืื. ื ืืืื ืืจืฃ ืืชืืืช ืืฉืื ืืื ื ืืืื ื-SQL ืขืฆืื. ืฉื ืืื ืืืจืฉืื ื ืืชืื ืฉืืืชื ืืื ืืืข ืฉืืื.