Sql 如何将带条件的简单查询转换为动态查询

Sql 如何将带条件的简单查询转换为动态查询,sql,sql-server,Sql,Sql Server,我有像这样的桌子 IF OBJECT_ID('tempdb..#t') IS NOT NULL DROP TABLE #t GO IF OBJECT_ID('tempdb..#tt') IS NOT NULL DROP TABLE #tt GO CREATE TABLE #t(ID INT,Name varchar(10)) insert into #t (ID,name)values (1,'mohan'),(2,'mohan') CREATE TABLE #tt(ID INT,Name

我有像这样的桌子

IF OBJECT_ID('tempdb..#t') IS NOT NULL 
DROP TABLE #t
GO
IF OBJECT_ID('tempdb..#tt') IS NOT NULL 
DROP TABLE #tt
GO
CREATE TABLE #t(ID INT,Name varchar(10))
insert into #t (ID,name)values (1,'mohan'),(2,'mohan')

CREATE TABLE #tt(ID INT,Name varchar(10))
insert into #tt (ID,name)values (1,'Raju'),(2,'ram')
我已经创建了一个程序,我需要根据状态调用它

CREATE PROCEDURE usp_Getresult
(
@statusval char(2)
)
AS 
BEGIN 
IF @statusval = '01'
BEGIN 
Select * from #t
END 
IF @statusval = '02'
BEGIN 
Select * from #tt
END
IF @statusval = '00'
BEGIN 
Select P.ID,P.Name from (
Select * from #t
UNION ALL
Select * from #tt)P
END
END
EXEC usp_Getresult '00'=> '01' or '02'

在我最初的过程中,它有更多的条件,我只是不想写进去,如果我想把这个转换成动态查询,即使我知道要转换成动态查询,但如果我有多个条件,那么我需要如何继续进行如果两个表模式相同,我只想让普通查询具有更好的智能性

CREATE PROCEDURE usp_Getresult
(
    @statusval char(2)
)
AS 
BEGIN 

    Select * from #t WHERE @statusval IN ('00', '01')
    UNION ALL
    Select * from #tt WHERE @statusval IN ('00', '02')

END

我不是在研究性能方面,只是想消除条件@eric@mohan111不知道你说的“消除”是什么意思如果,示例中没有一个if这个查询肯定会消除所有if语句。这里我给了你一个示例,但是我的原始查询有不同的列,有更多的输入参数。在这个场景中,它很好,但是认真地寻找dynamic@mohan111您的意思是,对于某些条件,您的查询返回不同的列?还是一模一样?