您的位置:首页 > 编程语言

编写适合于自己的代码生成器(二)

2007-03-03 18:12 211 查看
上次写了如何在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的兼容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐