日期:2014-05-18  浏览次数:20484 次

向高手请教一个sqlserver2005的数据库对象问题
小弟最近在做一个项目,想实现对数据库中表对象的复制。举例来讲
数据库中有表A,字段a varchar(40),字段b decimal(13,3),等等还有很多其它的类型列吧。
我的想法是:
1>根据查找相关系统表,首先得到数据库中表对象的清单,
2>找到每张表对应的字段列清单
3>找到表中约束的清单,主要是主键约束。
这样的三个过程实现自动创建表的副本。

前两个已经可以做到,但是到第三步,找约束清单,这个我遇到点问题。我是查找系统视图sys.key_constraints,但这个视图并没有告诉我,该约束对应的关键字段列,所以,就不能完整的创建该约束。请问各位前辈,有没有了解这个的,告诉我如何才能找出该约束对应的字段?
另外,针对我的这种复制表的做法,是否还有什么别的好办法,希望大家提点下小弟!先谢谢大家!

------解决方案--------------------
主键约束
SQL code

select s.name as TABLE_SCHEMA, t.name as TABLE_NAME, k.name as CONSTRAINT_NAME, c.name as COLUMN_NAME, ic.key_ordinal AS ORDINAL_POSITION
  from sys.key_constraints as k
  join sys.tables as t
    on t.object_id = k.parent_object_id
  join sys.schemas as s
    on s.schema_id = t.schema_id
  join sys.index_columns as ic
    on ic.object_id = t.object_id
   and ic.index_id = k.unique_index_id
  join sys.columns as c
    on c.object_id = t.object_id
   and c.column_id = ic.column_id
 where k.type = 'PK'