取表字段的默认值:
select b.name as ColumnName,text DefaultValue from sys.syscomments  as a
inner join sys.columns b on a.id = b.default_object_id
where b.object_id = Object_Id('表名')
取出的结果是:
Name (N'名字')  ---这个varchar类型
Gu (newid())  --这个是guid类型
dt ('1998-1-1')  --这个是datetime类型
现在到程序当中,需要把这些值转换.
比如(N'名字')应该转换成'名字'
(newid())应该转换成c#的Guid.NewGuid()方法
('1998-1-1')转换成new DateTime(1999,1,1)我想sqlserver2005本身提供了(N'名字')转换,还有其他的又怎么实现.
现在关键是我不知道默认值是怎样填的,我上面打的比方是已知,还有未知的默认值,需要取出来实现.
谢谢.

解决方案 »

  1.   

    你可以根据system_type_id转换成相应的值
    其中TYPE_NAME(system_type_id)可以让你知道当前类型的名称
      

  2.   


    create table tb(id int,name varchar(34),id2 int default 2,id3 varchar(50) default 'nihao',
    id4 datetime default getdate(),id5 decimal(10,2) default 0.55)select 
    c.name as 表名,
    a.name as 字段名,
    b.name as  字段类型,
    isnull(columnproperty(a.id,a.name,'precision'),'') as 字段长度,
    replace(replace(isnull(d.text,''),')',''),'(','') as 默认
    FROM syscolumns a
    left join systypes b on a.xtype=b.xusertype
    inner join sysobjects c on a.id=c.id  and c.xtype='U' and c.status>=0
    left join syscomments d on a.cdefault=d.id
    where a.id=object_id('tb')表名 字段名 字段类型 字段长度 默认
    tb id int 10
    tb name varchar 34
    tb id2 int 10 2
    tb id3 varchar 50 'nihao'
    tb id4 datetime 23 getdate
    tb id5 decimal 10 0.55
      

  3.   

    你可以参考水版主的数据库类,这个是数据库类型和.net类型的对应问题,只要能对得上一切都可以自己配制。