解决方案 »

  1.   


    create table test1(colnull varchar(20),col varchar(20))
    insert test1(col) values('')
     /*
    (1 行受影响)
    */
     
     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 ##tx FROM 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 
    where d.name='test1'
    order by object_name(a.id),a.colorder 
    /*
    test1 1 colnull varchar 20 20 0 √
    2 col varchar 20 20 0 √
    */从这个测试来看好像是一样的.
      

  2.   

    create database db1
    go
    use db1
    go
    select top 50000 id=identity(int,0,1),col2=null,col3='abc',col4='gif' into tb1 from sysobjects a,sysobjects b
    go
    create database db2
    go
    use db2
    go
    select top 50000 id=identity(int,0,1),col2='abc',col3='abc',col4='gif' into tb1 from sysobjects a,sysobjects b
    go
    --执行完毕后,查看两数据库属性,都为大小:2.73M,可用0.94M.
    /*
    drop table tb1
    use db1
    drop table tb1
    use master
    drop database db1,db2
    */
      

  3.   

    如果是 char,nchar,binary 这类的注意,其它的应该基本没区别.
      

  4.   

    定长的,为什么叫定长,就不说了。
    不定长的,null不占, null代表未分配地址。''已分配了地址。字段给''默认值与null比较, 这么一点空间的消耗比起性能的损失,算不了什么。 推荐尽可能使用默认值而不是null