我有一個表達:
DECLARE @Conditions NVARCHAR(MAX) = '200>100 AND YEAR(GETDATE())=2022'
我想檢查運算式是否為真。
uj5u.com熱心網友回復:
要從 T-SQL 中將字串作為 SQL 陳述句執行,請使用sp_executesql
在您的情況下,您希望使用輸出引數并將代碼片段嵌入更大的陳述句中,例如SELECT @outputParam = CASE WHEN <your code snippet> THEN 1 ELSE 0 END (因為 T-SQL 沒有布爾資料型別。)
DECLARE @Conditions NVARCHAR(MAX) = '200>100 AND YEAR(GETDATE())=2022';
DECLARE @SQLString NVARCHAR(MAX);
DECLARE @SQLResult INT;
SET @SQLString = CONCAT(
N'SELECT @Result = CASE WHEN ',
@Conditions,
N' THEN 1 ELSE 0 END;'
)
EXECUTE sp_executesql
@SQLString
,N'@Result INT OUTPUT'
,@Result = @SQLResult OUTPUT;
-- This SELECT statement returns the value of the OUTPUT parameter.
SELECT @SQLResult;
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=5697ea4d14201e44d0e8888abbc6037b
編輯:
CASE通過將結果初始化為0(fail) 并僅1在條件為真時將其設定為 (success)來避免運算式。
DECLARE @Conditions NVARCHAR(MAX) = '200>100 AND YEAR(GETDATE())=2022';
DECLARE @SQLString NVARCHAR(MAX);
DECLARE @SQLResult INT = 0;
SET @SQLString = CONCAT(
N'SELECT @Result = 1 WHERE ',
@Conditions
)
EXECUTE sp_executesql
@SQLString
,N'@Result INT OUTPUT'
,@Result = @SQLResult OUTPUT;
-- This SELECT statement returns the value of the OUTPUT parameter.
SELECT @SQLResult;
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=3e375c464f1eab2e652bc446a4c7484f
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/460693.html
上一篇:根據最小時間差減少表記錄
