數值運算式:sp_CalcExpression
CREATE PROCEDURE sp_CalcExpression
@Expression VARCHAR(8000),
@Result DECIMAL(10,2) OUTPUT
AS
BEGIN
DECLARE @SQL NVARCHAR(4000);
SET @SQL = N'SET @Result = ' + @Expression;
EXEC sp_executesql @SQL, N'@Result DECIMAL(10,2) OUTPUT', @Result OUTPUT;
SELECT @Result;
END
呼叫範例
DECLARE @x DECIMAL(10,2);
EXEC sp_CalcExpression '(100 + 2.1)*0.01', @x OUTPUT;
SELECT @x; -- 1.02
字串運算式:sp_ExecExpression
CREATE PROCEDURE sp_ExecExpression
@Expression VARCHAR(8000),
@Result VARCHAR(8000) OUTPUT
AS
BEGIN
DECLARE @SQL NVARCHAR(4000);
SET @SQL = N'SET @Result = ' + @Expression;
EXEC sp_executesql @SQL, N'@Result VARCHAR(8000) OUTPUT', @Result OUTPUT;
SELECT @Result;
END
呼叫範例
DECLARE @x VARCHAR(100);
EXEC sp_ExecExpression 'LEFT(''aBcD'',2)', @x OUTPUT;
SELECT @x; -- 'aB'
注意事項
- 動態 SQL 需防範 SQL Injection,僅供受信任環境使用。
sp_executesql 參數化輸出可避免轉型錯誤並重複使用執行計畫。