我想在TableName条件中使用where子句 例如。当我的变量@ col1为空时,我不想使用@ col1的位置,它应检查@ col2 如果@ col2也为空,则返回所有记录。 或者在变量内检查它们各自的条件/值。
declare @col1 nvarchar(50)=''
declare @col2 nvarchar(50)=''
select * from TableName
where
(isnull(@col1 ,'')!='' AND col1 =@col1 )
OR
(isnull(@col2 ,'')!='' AND col2 =@col2 )
当@ col1或@ col2为空时,不返回任何记录。
相反,当两者都是空白时,它应该返回所有记录, 如果其中任何一个包含任何值,则它应该适用于该条件。
编辑:不允许动态Sql
答案 0 :(得分:1)
尝试:
declare @col1 nvarchar(50)=''
declare @col2 nvarchar(50)=''
select * from TableName
where
(isnull(@col1 ,'')='' OR col1 =@col1 )
OR
(isnull(@col2 ,'')='' OR col2 =@col2 )
OPTION (RECOMPILE)
这是在没有动态SQL的情况下处理动态条件的方法
答案 1 :(得分:1)
你可以使用LIKE
来欺骗它declare @col1 nvarchar(50)=''
declare @col2 nvarchar(50)=''
select * from TableName
where
( col1 LIKE ISNULL(@col1, '%' )
AND
( col2 LIKE ISNULL(@col2, '%' )
当@variable为null时,它将设置为过滤LIKE'%',它返回所有值
我将逻辑更改为AND,因为假设两个@variable都有值,那么它不应该是显示两个值的显示数据吗?这导致AND逻辑。这可能需要考虑
答案 2 :(得分:1)
为此
创建动态查询DECLARE @ COL1 NVARCHAR(50)=''
DECLARE @ COL2 NVARCHAR(50)=''
DECLARE @SQL NVARCHAR(500)
SET @ SQL ='SELECT * FROM TABLENAME'
如果(@ COL1!= '')
BEGIN
SET @ SQL = @ SQL +'WHERE COL1 ='+ @ COL1 +''
END EXEC @SQL