OBJECTPROPERTY
返回当前数据库中对象的有关信息。语法
OBJECTPROPERTY ( id , property ) 参数
id一个表达式,包含当前数据库中某个对象的 ID。id 的数据类型是 int。Property一个表达式,包含针对由 id 指定的对象将要返回的信息。Property 可以是下面这些值中的一个。 说明  除非加以注释,否则,如果 property 是无效的属性名,则返回 NULL。
属性名称 对象类型 描述和返回的值 
CnstIsClustKey 约束 带有聚集索引的主键。 
1 = True
0 = False
 
CnstIsColumn 约束 COLUMN 约束。 
1 = True
0 = False
 
CnstIsDeleteCascade 约束 带有 ON DELETE CASCADE 选项的外键约束。 
CnstIsDisabled 约束 禁用的约束。 
1 = True
0 = False
 
CnstIsNonclustKey 约束 带有非聚集索引的主键。 
1 = True
0 = False
 
CnstIsNotTrusted 约束 启用约束时未检查现有行,所以可能不是所有行都受约束的控制。 
1 = True
0 = False
 
CnstIsNotRepl 约束 使用 NOT FOR REPLICATION 关键字定义约束。 
CnstIsUpdateCascade 约束 带有 ON UPDATE CASCADE 选项的外键约束。 
ExecIsAfterTrigger 触发器 AFTER 触发器。 
ExecIsAnsiNullsOn 过程、触发器、视图 创建时的 ANSI_NULLS 设置。 
1 = True
0 = False
 
ExecIsDeleteTrigger 触发器 DELETE 触发器。 
1 = True
0 = False
 
ExecIsFirstDeleteTrigger 触发器 对表执行 DELETE 时触发的第一个触发器。 
ExecIsFirstInsertTrigger 触发器 对表执行 INSERT 时触发的第一个触发器。 
ExecIsFirstUpdateTrigger 触发器 对表执行 UPDATE 时触发的第一个触发器。 
ExecIsInsertTrigger 触发器 INSERT 触发器。 
1 = True
0 = False
 
ExecIsInsteadOfTrigger 触发器 INSTEAD OF 触发器。 
ExecIsLastDeleteTrigger 触发器 对表执行 DELETE 时触发的最后一个触发器。 
ExecIsLastInsertTrigger 触发器 对表执行 INSERT 时触发的最后一个触发器。 
ExecIsLastUpdateTrigger 触发器 对表执行 UPDATE 时触发的最后一个触发器。 
ExecIsQuotedIdentOn 过程、触发器、视图 创建时的 QUOTED_IDENTIFIER 设置。 
1 = True
0 = False
 
ExecIsStartup 过程 启动过程。 
1 = True
0 = False
 
ExecIsTriggerDisabled 触发器 禁用的触发器。 
1 = True
0 = False
 
ExecIsUpdateTrigger 触发器 UPDATE 触发器。 
1 = True
0 = False
 
HasAfterTrigger 表,视图 表或视图具有 AFTER 触发器。 
1 = True
0 = False
 
HasInsertTrigger 表,视图 表或视图具有 INSERT 触发器。 
1 = True
0 = False
 
HasInsteadOfTrigger 表、视图 表或视图具有 INSTEAD OF 触发器。 
1 = True
0 = False
 
HasUpdateTrigger 表、视图 表或视图具有 UPDATE 触发器。 
1 = True
0 = False
 
IsAnsiNullsOn 函数、过程、表、触发器、视图 指定表的 ANSI NULLS 选项设置为 ON,表示所有与空值的比较都取值为 UNKNOWN。只要表存在,该设置就应用于表定义中的所有表达式,包括计算列和约束。 
1 = ON
0 = OFF
 
IsCheckCnst 任何 CHECK 约束。 
1 = True
0 = False
 
IsConstraint 任何 约束。 
1 = True
0 = False
 
IsDefault 任何 绑定的默认值。 
1 = True
0 = False
 
IsDefaultCnst 任何 DEFAULT 约束。 
1 = True
0 = False
 
IsDeterministic 函数、视图 函数的确定性属性。只适用于标量值及表值函数。 
1 = 可确定的
0 = 不可确定的
NULL = 不是标量值或表值函数,或者是无效的对象 ID。
 
IsExecuted 任何 指定执行该对象的方式(视图、过程或触发器)。 
1 = True
0 = False
 
IsExtendedProc 任何 扩展过程。 
1 = True
0 = False
 
IsForeignKey 任何 FOREIGN KEY 约束。 
1 = True
0 = False
 
IsIndexed 表、视图 带有索引的表或视图。 
IsIndexable 表、视图 可以创建索引的表或视图。 
IsInlineFunction 函数 内嵌函数。 
1 = 内嵌函数
0 = 非内嵌函数
NULL = 不是函数,或者是无效的对象 ID。
 
IsMSShipped 任何 在安装 Microsoft® SQL Server™ 2000 的过程中创建的对象。 
1 = True
0 = False
 
IsPrimaryKey 任何 PRIMARY KEY 约束。 
1 = True
0 = False
 
IsProcedure 任何 过程。 
1 = True
0 = False
 
IsQuotedIdentOn 函数、过程、表、触发器、视图 指定表的被引用标识符设置为 ON,表示在表定义所涉及的所有表达式中,双引号标记分隔标识符。 
1 = ON
0 = OFF
 
IsReplProc 任何 复制过程。 
1 = True
0 = False
 
IsRule 任何 绑定的规则。 
1 = True
0 = False
 
IsScalarFunction 函数 标量值函数。 
1 = 标量值
0 = 表值
NULL = 不是函数,或者是无效的对象 ID。
 
IsSchemaBound 函数,视图 使用 SCHEMABINDING 创建的架构绑定函数或视图。 
1 = 架构绑定
0 = 非架构绑定
NULL = 不是函数或视图,或者是无效的对象 ID。
 
IsSystemTable 表 系统表。 
1 = True
0 = False
 
IsTable 表 表。 
1 = True
0 = False
 
IsTableFunction 函数 表值函数。 
1 = 表值
0 = 标量值
NULL = 不是函数,或者是无效的对象 ID。
 
IsTrigger 任何 触发器。 
1 = True
0 = False
 
IsUniqueCnst 任何 UNIQUE 约束。 
1 = True
0 = False
 
IsUserTable 表 用户定义的表。 
1 = True
0 = False
 
IsView 视图 视图。 
1 = True
0 = False
 
OwnerId 任何 对象的所有者。 
Nonnull = 对象所有者的数据库用户 ID。
NULL = 无效的输入。
 
TableDeleteTrigger 表 表有 DELETE 触发器。 
>1 = 给定类型的第一个触发器的 ID。
 
TableDeleteTriggerCount 表 表具有指定数目的 DELETE 触发器。 
>1 = 给定类型的第一个触发器的 ID。
NULL = 无效的输入。
 
TableFullTextBackgroundUpdateIndexOn 表 表已启用全文后台更新索引。 
1 = True
0 = False
 
TableFulltextCatalogId 表 表的全文索引数据所驻留的全文目录的 ID。 
Nonzero = 全文目录 ID,它与标识全文索引表中行的唯一索引相关。
0 = 表不是全文索引的。
 
TableFullTextChangeTrackingOn 表 表已启用全文更改跟踪。 
1 = True
0 = False
 
TableFulltextKeyColumn 表 与某个单列唯一索引相关联的列 ID,这个单列唯一索引参与全文索引定义。 
0 = 表不是全文索引的。
 
TableFullTextPopulateStatus 表 0 = 不填充
1 = 完全填充
2 = 增量填充 
TableHasActiveFulltextIndex 表 表具有一个活动的全文索引。 
1 = True
0 = False
 
TableHasCheckCnst 表 表具有 CHECK 约束。 
1 = True
0 = False
 
TableHasClustIndex 表 表具有聚集索引。 
1 = True
0 = False
 
TableHasDefaultCnst 表 表具有 DEFAULT 约束。 
1 = True
0 = False
 
TableHasDeleteTrigger 表 表具有 DELETE 触发器。 
1 = True
0 = False
 
TableHasForeignKey 表 表具有 FOREIGN KEY 约束。 
1 = True
0 = False
 
TableHasForeignRef 表 表由 FOREIGN KEY 约束引用。 
1 = True
0 = False
 
TableHasIdentity 表 表具有标识列。 
1 = True
0 = False
 
TableHasIndex 表 表具有一个任何类型的索引。 
1 = True
0 = False
 
TableHasInsertTrigger 表 对象具有 Insert 触发器。 
1 = True
0 = False
NULL = 无效的输入。
 
TableHasNonclustIndex 表 表具有非聚集索引。 
1 = True
0 = False
 
TableHasPrimaryKey 表 表具有主键。 
1 = True
0 = False
 
TableHasRowGuidCol 表 对于 uniqueidentifier 列,表具有 ROWGUIDCOL。 
1 = True
0 = False
 
TableHasTextImage 表 表具有 text 列。 
1 = True
0 = False
 
TableHasTimestamp 表 表具有 timestamp 列。 
1 = True
0 = False
 
TableHasUniqueCnst 表 表具有 UNIQUE 约束。 
1 = True
0 = False
 
TableHasUpdateTrigger 表 对象具有 Update 触发器。 
1 = True
0 = False
 
TableInsertTrigger 表 表具有 INSERT 触发器。 
>1 = 给定类型的第一个触发器的 ID。
 
TableInsertTriggerCount 表 表具有指定数目的 INSERT 触发器。 
>1 = 给定类型的第一个触发器的 ID。
 
TableIsFake 表 表不是真实的。根据需要 SQL Server 对其进行内部具体化。 
1 = True
0 = False
 
TableIsPinned 表 驻留表以将其保留在数据高速缓存中。 
1 = True
0 = False
 
TableTextInRowLimit 表 text in row 所允许的最大字节数,如果没有设置 text in row 选项则为 0。 
TableUpdateTrigger 表 表具有 UPDATE 触发器。 
>1 = 给定类型的第一个触发器的 ID。
 
TableUpdateTriggerCount 表 表具有指定数目的 UPDATE 触发器。 
>1 = 给定类型的第一个触发器的 ID。
 
返回类型
int

解决方案 »

  1.   

    OR:参考:SELECT 
    (case when a.colorder=1 then d.name else '' end) N'表名',
    a.colorder N'字段序号',
    a.name N'字段名',
    (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) N'标识',
    (case when (SELECT count(*)
    FROM sysobjects
    WHERE (name in
               (SELECT name
             FROM sysindexes
              WHERE (id = a.id) AND (indid in
                        (SELECT indid
                      FROM sysindexkeys
                       WHERE (id = a.id) AND (colid in
                                 (SELECT colid
                                FROM syscolumns
                               WHERE (id = a.id) AND (name = a.name))))))) AND
           (xtype = 'PK'))>0 then '√' else '' end) N'主键',
    b.name N'类型',
    a.length N'占用字节数',
    COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'长度',
    isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'小数位数',
    (case when a.isnullable=1 then '√'else '' end) N'允许空',
    isnull(e.text,'') N'默认值',
    isnull(g.[value],'') AS N'字段说明'
    --into ##txFROM  syscolumns  a left join systypes b 
    on  a.xtype=b.xusertype
    inner join sysobjects d 
    on a.id=d.id  and  d.xtype='U' and  d.name<>'dtproperties'
    left join syscomments e
    on a.cdefault=e.id
    left join sysproperties g
    on a.id=g.id AND a.colid = g.smallid  
    order by object_name(a.id),a.colorder
      

  2.   

    select a.name as 主键名 from syscolumns a 
    join sysindexkeys b on a.id=b.id and a.colid=b.colid and a.id=object_id('表名')
    join sysindexes c on a.id=c.id and b.indid=c.indid 
    join sysobjects d on c.name=d.name and d.xtype='PK'
      

  3.   

    select OBJECTPROPERTY(id(your_field),IsPrimaryKey)1 = True
    0 = False
      

  4.   

    可是这种方法只限于SQL Server吧
    用ADO里面的方法
    rs->GetItem(Index)->GetAttributes() & adFldKeyColumn为什么不行?
      

  5.   

    这个方法简单:Dsp_pkeys 表名
    不过什么用ADO的方法就不会了:)
      

  6.   

    虽然没有用ado,但大家给我提供的也是一种方法,谢谢了!