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对“这就是要求。”马迪瓦南,那么什么是更好的方法呢?