如何根据参数值添加到 Where 子句
How to add to Where clause depending on parameter value
我有一个 sql 查询,我想要 运行 并且如果我将参数标记为 true,我想向 where 子句添加一些内容。我不认为我需要两次使用相同的 sql 语句,但找不到方法来做到这一点。这就是我要的。
DECLARE @getShipped VARCHAR = 'false';
SELECT DISTINCT
Serial_No
INTO #Serials
FROM Part_v_Container_Change2 AS CC
WHERE Change_Date <= @dateEnding
*** AND IF @getShipped = 'true' THEN CC.Container_Status = 'Shipped' ***
已经尝试过 if 语句和 case 语句,但似乎无法使它起作用?如果我没有的话,我只是不想重复 sql。
像这样尝试
DECLARE @getShipped VARCHAR(20) = 'false';
SELECT DISTINCT
Serial_No
INTO #Serials
FROM Part_v_Container_Change2 AS CC
WHERE Change_Date <= @dateEnding AND
((@getShipped = 'true' AND CC.Container_Status = 'Shipped') OR @getShipped = 'false')
尝试动态 sql 如下
DECLARE @getShipped VARCHAR(20) = 'false';
DECLARE @sql NVARCHAR(255) = 'SELECT DISTINCT Serial_No INTO #Serials FROM Part_v_Container_Change2 AS CC
WHERE Change_Date <= ''' + + CONVERT(VARCHAR, @dateEnding, 101) + ''''
DECLARE @filter NVARCHAR(50) = ' AND CC.Container_Status = ''Shipped'''
IF @getShipped = 'true'
SET @sql = @sql + @filter
EXEC (@sql)
我有一个 sql 查询,我想要 运行 并且如果我将参数标记为 true,我想向 where 子句添加一些内容。我不认为我需要两次使用相同的 sql 语句,但找不到方法来做到这一点。这就是我要的。
DECLARE @getShipped VARCHAR = 'false';
SELECT DISTINCT
Serial_No
INTO #Serials
FROM Part_v_Container_Change2 AS CC
WHERE Change_Date <= @dateEnding
*** AND IF @getShipped = 'true' THEN CC.Container_Status = 'Shipped' ***
已经尝试过 if 语句和 case 语句,但似乎无法使它起作用?如果我没有的话,我只是不想重复 sql。
像这样尝试
DECLARE @getShipped VARCHAR(20) = 'false';
SELECT DISTINCT
Serial_No
INTO #Serials
FROM Part_v_Container_Change2 AS CC
WHERE Change_Date <= @dateEnding AND
((@getShipped = 'true' AND CC.Container_Status = 'Shipped') OR @getShipped = 'false')
尝试动态 sql 如下
DECLARE @getShipped VARCHAR(20) = 'false';
DECLARE @sql NVARCHAR(255) = 'SELECT DISTINCT Serial_No INTO #Serials FROM Part_v_Container_Change2 AS CC
WHERE Change_Date <= ''' + + CONVERT(VARCHAR, @dateEnding, 101) + ''''
DECLARE @filter NVARCHAR(50) = ' AND CC.Container_Status = ''Shipped'''
IF @getShipped = 'true'
SET @sql = @sql + @filter
EXEC (@sql)