编写适合于自己的代码生成器(二)
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的兼容。
在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的兼容。
相关文章推荐
- 拥有自己的代码生成器—Newlife.XCode模板编写教程
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 从零开始编写自己的JavaScript框架(一)
- 自己写的堆排序程序,编写时有几个错误点,见注释,已通过dev c++调试通过。
- //1、有一个字符串开头或结尾含有n个空格(” abcdefgdddd ”),欲去掉前后空格,返回一个新字符串。 //要求1:请自己定义一个接口(函数),并实现功能;70分 //要求2:编写
- 编程精粹--编写高质量的C语言代码(2):自己设计并使用断言(一)
- 使用Flex Bison 和LLVM编写自己的编译器
- Linux---进程替换及编写一个自己的shell
- JEECG-自己用代码生成器生成的controller类是怎样进行数据持久化的
- 动手编写自己的级联下拉列表 - 基础
- 再谈代码生成器,拥有自己最适合的代码生成器
- 使用Flex Bison 和LLVM编写自己的编译器[zz]
- 编写自己的代码库(javascript常用实例的实现与封装)[转]
- simulink小技巧:如何将自己编写的模块集成到模块浏览器里面去
- 编写自己的jQuery提示框(Tip)插件
- 用ASP.NET写你自己的代码生成器(3)。
- PHP4调用自己编写的COM组件
- 如何编写自己单向链表(c语言)
- 【C++ Primer】自己动手编写函数 atoi(char *str)
- 编写自己的可视化控件