SQL裡有 sp_executesql,學名叫「系統預存程序」,透過指定參數的方法動態組出 T-SQL 指令,來避免使用SQL 資料隱碼的攻擊。而且sp_executesql具備以參數來指定所要執行的 T-SQL,藉由這個特性,可以讓動態組出的 T-SQL 更加安全。
USE Factory
GO
-- 宣告變數
DECLARE @SQLCommand nvarchar(200)
DECLARE @columnList nvarchar(50)
DECLARE @parmColor varchar(10)
-- 定義變數
SET @columnList = N'CarID 車子編號, Type 類型'
SET @parmColor = 'Black'
-- 動態組出 T-SQL
SET @SQLCommand = 'SELECT ' + @columnList + ' FROM Production.Car WHERE Type = @type'
-- 執行動態組出的 T-SQL
--系統預存程序 sp_executesql 需要傳入 3 個參數
EXECUTE sp_executesql @SQLCommand, N'@type varchar(10)', @type = @parmType
要再加上一個查詢的限制條件,就要多宣告並設定一個新變數 @parmPID,同時在系統預存程序 sp_executesql 也要隨之修改
USE CarsFactory
GO
-- 宣告變數
DECLARE @SQLCommand nvarchar(200)
DECLARE @columnList nvarchar(50)
DECLARE @parmType varchar(10)
DECLARE @parmPID int
-- 定義變數
SET @columnList = N'CarID 產品編號, Type 顏色'
SET @parmType = 'Sports Car'
SET @parmCID = 100
-- 動態組出 T-SQL
SET @SQLCommand = 'SELECT ' + @columnList + ' FROM Production.Product WHERE Type = @type AND CarID < @cID'
-- 執行動態組出的 T-SQL
EXECUTE sp_executesql @SQLCommand, N'@type varchar(10), @cID int', @type = @parmType, @cID = @parmCID
不採用EXECUTE 或 sp_executesql的方式
USE CarsFactory
GO
-- 宣告變數
DECLARE @parmType varchar(10)
DECLARE @parmCID int
-- 定義變數
SET @parmType = 'Sports Car'
SET @parmCID = 100
SELECT CarID 產品編號, Type 顏色
FROM Production.Product WHERE Type = @parmType AND CarID < @parmCID
-雲遊山水為知已逍遙一生而忘齡- 電腦神手
沒有留言:
張貼留言