关于动态加入 - 需要帮助

时间:2011-06-08 18:56:21

标签: sql sql-server

假设我有三个名为

的表
Department
-------------
DeptID   DeptName
------   ---------
1         Accounts
2         Sales
3         Purchase

Location
----------
LocID       LocName
------      --------
1            China
2            UK
3            USA
4            Germany

Employee
----------
EmpID     Name      Salary   LocID    DeptID
-----     -----     ------   -----    -------
1         jhon       15000      1      2
2         Sina       12500      3      1
3         Keith      17420      2      3

EMPID是员工表的PK,也是员工表与locid和deptid连接的位置和部门。

在简单的sql中我们可以很容易地加入并显示像

这样的数据
empid name   salary   locname   deptname.

但在我的情况下,我不想通过tablename.columnname对连接进行硬编码。

我宁愿查询系统tabele并获取关系并动态构建连接。我在sql中不是很好。所以请有人帮忙处理样品,因此我可以动态构建连接.............请帮忙。

1 个答案:

答案 0 :(得分:0)

您可以像这样获取表的主键列:

select *
from sys.identity_columns c
where c.object_id = object_id('TableName')

然后你可以得到一个像这样的表的外键列:

select *
from sys.foreign_key_columns fkc
inner join sys.columns c on c.object_id = fkc.parent_object_id and c.column_id = fkc.parent_column_id
where fkc.parent_object_id = object_id('TableName')

通过这种方式,您可以为表之间的连接生成SQL。这将涉及SQL中的大量字符串操作,这不是很愉快。

总的来说,我建议尽可能不使用动态SQL。 SQL需要动态吗?