上次写了如何在SQL SERVER 2000 上实现代码生成器的基本原理,可是在 vista 下无法安装 SQL SERVER 2000,所以今天花了一个下午的时间,特意研究了一下遍历SQL SERVER 2005的方法,用于实现代码生成器对vista的兼容.注:由于写作时时间仓促,以下内容均在SQL Server Management Studio Express下测试通过,当然也有其他的方法可以实现.若有不足或错误之处,请读者给我留言.

      在SQL SERVER 2005 中查询系统信息都是通过视图来完成的,数据库在系统视图sys.databases中
查询系统中存在的数据库:
编写适合于自己的代码生成器(二)SELECT * FROM sys.databases

查询数据库中的用户表:
编写适合于自己的代码生成器(二)SELECT * FROM sys.objects WHERE type='u'

查询表中的字段(本例使用的表是member):
编写适合于自己的代码生成器(二)SELECT sys.columns.*,sys.columns.name 列名,
编写适合于自己的代码生成器(二)    CASE WHEN sys.columns.is_identity 
= 1 THEN '' ELSE '' END 标识,
编写适合于自己的代码生成器(二)    CASE WHEN sys.columns.name 
= INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME THEN '' ELSE '' END 主键,
编写适合于自己的代码生成器(二)    sys.types.name 类型,
编写适合于自己的代码生成器(二)    sys.columns.max_length 占用字节数,
编写适合于自己的代码生成器(二)    COLUMNPROPERTY(sys.columns.object_id, sys.columns.name, 
'PRECISION') AS 长度,
编写适合于自己的代码生成器(二)    isnull(COLUMNPROPERTY(sys.columns.object_id, sys.columns.name, 
'Scale'), 0) 小数位数,
编写适合于自己的代码生成器(二)    sys.default_constraints.definition 默认值,
编写适合于自己的代码生成器(二)    (CASE WHEN sys.columns.is_nullable 
= 1 THEN '' ELSE '' END) 允许空
编写适合于自己的代码生成器(二)FROM sys.columns
编写适合于自己的代码生成器(二)    INNER JOIN sys.objects ON sys.columns.object_id
=sys.objects.object_id  AND sys.objects.type='u'
编写适合于自己的代码生成器(二)    INNER JOIN sys.types ON sys.columns.system_type_id
=sys.types.system_type_id 
编写适合于自己的代码生成器(二)    LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ON INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME
=sys.objects.name
编写适合于自己的代码生成器(二)    LEFT JOIN sys.default_constraints ON sys.columns.default_object_id
=sys.default_constraints.object_id
编写适合于自己的代码生成器(二)WHERE sys.objects.name
='member'


在视图sys.columns中可以得到表格的列
在视图sys.types中可以得到系统的字段类型
主键信息INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME.这个不容易找到,费了我好长时间才找到.

另外还有字段的描述没有找到是如何与sys.columns建立关联的,描述信息可以在视图sys.extended_properties中查询到:

编写适合于自己的代码生成器(二)select * from sys.extended_properties

有了上面的SQL语句相信读者能够实现在SQL SERVER 2005下使用的代码生成器了。当然你也可以将两个版本的SQL SERVER写成两个实现同一接口的类,然后实现兼容两个版本的代码生成器,当然也可以实现对ACCESS的兼容。

相关文章:

  • 2021-12-06
  • 2021-12-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-24
  • 2021-07-26
猜你喜欢
  • 2021-07-15
  • 2021-07-22
  • 2022-01-13
  • 2022-12-23
  • 2021-09-13
  • 2021-10-30
相关资源
相似解决方案