2011-06-08 76 views
-1

假设我有所谓的三个表关于动态加入 - 需要帮助

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,也EMPLOYEE表由LOCID和DEPTID与位置和部门参加。

在简单的SQL我们可以加入很容易,并显示像

empid name salary locname deptname. 

数据,但在我的情况,我不想硬编码由tablename.columnname加入。

而是我想查询系统表并获得关系并动态建立联接。我在sql中不是很好。所以请有人帮助样本,因为我可以动态构建连接.............请帮助。

+0

你为什么想要这样做? – HLGEM 2011-06-08 18:58:36

+0

你真的想让它变得复杂吗? – Lobo 2011-06-08 19:01:01

+1

你*不*这样做。简单。你写一个基于表定义的显式JOIN – gbn 2011-06-08 19:03:26

回答

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需要动态变化是否有很强的理由?

+0

可以请你给我一个小样本。 – Thomas 2011-06-09 10:34:52