SQL查询 - 来自字段的表

时间:2011-12-29 05:43:26

标签: sql dynamic-sql

这是我的情况。我有不同的表格,例如:

表A

Name | Phone              
John   123   
Mick   233

表B

Department | Position          
IT            xxx   
HR            yyy

下一个配置表是通过web动态创建的:

表C

Source | Field  
TABLE A    Name   
TABLE B    Department

当我运行应用程序时,我读了表C,我需要生成数据。 在这种情况下,我需要列出表A中的所有名称和表B中的所有部门。

我该如何查询?我希望有人可以帮助我。

干杯!

2 个答案:

答案 0 :(得分:0)

如果必须在sql中执行此操作 - 如果您不能信任TABLE C的内容,我不建议这样做 - 那么您将需要构造一个包含sql查询的变量,然后动态执行该sql查询。如何做到这完全取决于您的DBMS。 MySQL中的一个例子(假设TABLE C只有一行):

SELECT @sql:=CONCAT("SELECT ",field," FROM ",source) FROM TABLE_C;
PREPARE s1 FROM @sql;
EXECUTE s1;

SQL Server语法:

DECLARE @sql nvarchar(max)
SELECT @sql = "SELECT " + field + " FROM " + source FROM TABLE_C
EXEC sp_executesql @sql
GO

由于TABLE C肯定会有多行,因此您必须遍历TABLE C.这可以使用CURSOR完成,并且具体细节将取决于您的DBMS。

重要的是,请注意,如果您声明表C是从Web创建的,那么这非常危险。你无法保证FIELD和SOURCE字段中的内容:任何具有一点SQL知识的人都可以填充sql注入攻击。您可能需要做的是通过安全参数化的数据库元查询安全地验证TABLE C的内容是实际的表/列。

答案 1 :(得分:-1)

 select ta.Name, tb.Department 
 from TABLEA ta, TABLEB  tb