Nuva 示例代码之模板示例(2)
← 目录
作者: 一了 <
[email protected]
> 日期: 2006-09-05 一句话总结: 本例的模板将能够生成数据库的删除表的 SQL 脚本(本例应用于 MS SQL Server)。
# Nuva 示例代码之模板示例(2) ``` <..======================================================== == == == Macrobject Nuva Samples == == == == Copyright (c) 2004-2006 Macrobject Software == == == == ALL RIGHTS RESERVED == == == == http://www.macrobject.com == == == ========================================================..> --------------------------------------------------------------------------- -- Drop constraints --------------------------------------------------------------------------- <.foreach(T = System.Data.DefaultSchema.Tables | T.IsEnabled).> <.foreach(P = T.ParentRelations | P.IsEnabled).> ALTER TABLE [dbo].[<.=T.Name.>] DROP CONSTRAINT [<.=P.Name.>] GO <./foreach.> <./foreach.> --------------------------------------------------------------------------- -- Drop tables --------------------------------------------------------------------------- <.foreach(T = System.Data.DefaultSchema.Tables | T.IsEnabled).> DROP TABLE [dbo].[<.=T.Name.>] GO <./foreach.> ``` ``` <.. 【简介】 本例是一个真正的模板,来自于 Macrobject CodeAuto ([http://www.macrobject.com/cn/codeauto/index.htm](http://www.macrobject.com/cn/codeauto/index.htm)) 附带的模板(位于 Templates\Microsoft SQL Server Scripts 的 DropTables.sql.nuva)。 本例的模板将能够生成数据库的删除表的 SQL 脚本(本例应用于 MS SQL Server)。 【看点】 1、本例的第一个循环就是循环默认的数据库表:System.Data.DefaultSchema.Tables System.Data.DefaultSchema.Tables 等同于上例的 System.Tables,System.Tables 是其简便的写法,都是提供一个默认的数据库表集合,通过一个与示例程序文件名相同的 cfg 文件可以配置如何读取这样的表集合。 本例中我们的 "模板示例.cfg" 内容如下: -xD:\Nuva-Samples\Northwind.xobject -x 参数指定一个 XObject 架构文件,通过该架构文件可以读取相应的数据架构信息。 XObject 文件可以通过 Macrobject CodeAuto 从数据库提取([http://www.macrobject.com/cn/codeauto/index.htm](http://www.macrobject.com/cn/codeauto/index.htm))。也可以通过 Nuva 程序直接从数据库读取,将在以后演示。 cfg 文件中的参数可以在通过 Nuva 虚拟机执行时放入命令行作为其参数。 System.Tables 返回一个 ObjectSet 对象,该对象是一个 DataObject 的集合,具体可以参考 <<Nuva API>> 的 System.Data 的信息。 这里的集合内每一个对象都是 TableObject 对象(DataObject 子类),具体的属性包括在上面的示例代码中。(还有些以后再演示介绍) 上面这些介绍内容与上例相同。 2、foreach 的 | 后面的表达式是一个过滤表达式,只有符合这个表达式的枚举项才执行 foreach 内的代码。(本例中过滤 Enabled 不为 true 的项) 里面的循环是 TableObject.ParentRelations,表示该表的所有父关系。 这儿生成的 SQL 采用 ALTER 表的方式删除外键约束,其中 P.Name 是关系名称。 【扩展】 本例可以进一步扩展以增强其实用性,比如可以改为支持 Oracle、DB2 等。 ..> ``` 本例运行结果如下: --------------------------------------------------------------------------- -- Drop constraints --------------------------------------------------------------------------- ALTER TABLE [dbo].[CustomerCustomerDemo] DROP CONSTRAINT [FK_CustomerCustomerDemo_Customers] GO ALTER TABLE [dbo].[CustomerCustomerDemo] DROP CONSTRAINT [FK_CustomerCustomerDemo] GO ALTER TABLE [dbo].[Employees] DROP CONSTRAINT [FK_Employees_Employees] GO ALTER TABLE [dbo].[EmployeeTerritories] DROP CONSTRAINT [FK_EmployeeTerritories_Territories] GO ALTER TABLE [dbo].[EmployeeTerritories] DROP CONSTRAINT [FK_EmployeeTerritories_Employees] GO ALTER TABLE [dbo].[Order Details] DROP CONSTRAINT [FK_Order_Details_Products] GO ALTER TABLE [dbo].[Order Details] DROP CONSTRAINT [FK_Order_Details_Orders] GO ALTER TABLE [dbo].[Orders] DROP CONSTRAINT [FK_Orders_Shippers] GO ALTER TABLE [dbo].[Orders] DROP CONSTRAINT [FK_Orders_Employees] GO ALTER TABLE [dbo].[Orders] DROP CONSTRAINT [FK_Orders_Customers] GO ALTER TABLE [dbo].[Products] DROP CONSTRAINT [FK_Products_Suppliers] GO ALTER TABLE [dbo].[Products] DROP CONSTRAINT [FK_Products_Categories] GO ALTER TABLE [dbo].[Territories] DROP CONSTRAINT [FK_Territories_Region] GO --------------------------------------------------------------------------- -- Drop tables --------------------------------------------------------------------------- DROP TABLE [dbo].[Categories] GO DROP TABLE [dbo].[CustomerCustomerDemo] GO DROP TABLE [dbo].[CustomerDemographics] GO DROP TABLE [dbo].[Customers] GO DROP TABLE [dbo].[Employees] GO DROP TABLE [dbo].[EmployeeTerritories] GO DROP TABLE [dbo].[Order Details] GO DROP TABLE [dbo].[Orders] GO DROP TABLE [dbo].[Products] GO DROP TABLE [dbo].[Region] GO DROP TABLE [dbo].[Shippers] GO DROP TABLE [dbo].[Suppliers] GO DROP TABLE [dbo].[Territories] GO