Sql 带有join和union的动态select语句

Sql 带有join和union的动态select语句,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我想使用存储过程准备一个动态select with join和select with unionstation。这是我的责任 以下是数据 我有两张桌子: 表:测试1 select * from test1; a b ------ A B C D E F select * from test2; a b ------ A B C D 表:测试1 select * from test1; a b ------ A B C D E F select *

我想使用存储过程准备一个动态
select with join
select with union
station。这是我的责任 以下是数据

我有两张桌子:

:测试1

select * from test1;
a   b
------
A   B
C   D
E   F
select * from test2;
a   b
------
A   B
C   D
:测试1

select * from test1;
a   b
------
A   B
C   D
E   F
select * from test2;
a   b
------
A   B
C   D
注意:现在我想使用 存储过程。我创建了演示存储过程,如下所示:

CREATE PROCEDURE Pro_Test
@Columns VARCHAR(100), --Columns to display
@Tables VARCHAR(1000), --Two or More tables names may pass here
@JoinORUnion VARCHAR(50), --Join or Union the tables
@IfJoinOnColumn VARCHAR(50) ---If join has pass then ON which column

AS

DECLARE @query VARCHAR(MAX) 

    IF @JoinORUnion = 'Inner Join'
    BEGIN

        SET @query = '';    ---Here want to prepare select with join statement

        EXEC(@query);

    END

    ELSE IF @JoinORUnion = 'Union all'
    BEGIN

        SET @query = '';    ---Here want to prepare select with union statement

        EXEC(@query);

    END

GO  
如果我通过:

EXECUTE Pro_Test
@Columns        = 'a,b',
@Tables         = 'Test1,Test2',
@JoinORUnion    = 'Inner Join',
@IfJoinOnColumn = 'a';
EXECUTE Pro_Test
@Columns        = 'a,b',
@Tables         = 'Test1,Test2',
@JoinORUnion    = 'Union all',
@IfJoinOnColumn = '';
那么该语句应该如下所示:

select test1.a,test1.b from test1
INNER JOIN 
test2 ON test1.a = test2.a;
select a,b from test1
union all
select a,b from test2
结果:

a   b
------
A   B
C   D   
a   b
------
A   B
C   D
E   F
A   B
C   D
如果我通过:

EXECUTE Pro_Test
@Columns        = 'a,b',
@Tables         = 'Test1,Test2',
@JoinORUnion    = 'Inner Join',
@IfJoinOnColumn = 'a';
EXECUTE Pro_Test
@Columns        = 'a,b',
@Tables         = 'Test1,Test2',
@JoinORUnion    = 'Union all',
@IfJoinOnColumn = '';
那么该语句应该如下所示:

select test1.a,test1.b from test1
INNER JOIN 
test2 ON test1.a = test2.a;
select a,b from test1
union all
select a,b from test2
结果:

a   b
------
A   B
C   D   
a   b
------
A   B
C   D
E   F
A   B
C   D

和您的问题在哪里?我想说这是一种糟糕的方法,并且将受制于sql注入。这是您的要求@mak@mohan111对“这就是要求。”马迪瓦南,那么什么是更好的方法呢?