asp.net下进行数据库安装与初始化化的例子 使用到了一个sql脚本文件,里面有创建表以及导入数据的部分,于是有朋友问是如何实现的,这里就简单介绍下。
一开始,判断表存在并删除表的代码是我自己写的,基本做法如下:

        private System.Text.StringBuilder sBuilder=new System.Text.StringBuilder();
        private void tt()
        {
            try
            {
                SqlConnection conn=new SqlConnection(txtConn.Text.Trim());
                string sql="select name from dbo.sysobjects where OBJECTPROPERTY(id, N'IsUserTable') = 1 and name not in ('dtproperties')";
                SqlDataAdapter adapter=new SqlDataAdapter(sql,conn);
                SqlCommandBuilder sb=new SqlCommandBuilder(adapter);
                DataTable dt=new DataTable();
                adapter.Fill(dt);            
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    CreateDropTableScript(dt.Rows[i][0].ToString());
                }
                txtResult.Text=sBuilder.ToString();
                dt.Dispose();
                conn.Close();
            }
            catch (Exception ex)
            {
                
            }

        }

        private void CreateDropTableScript(string tblName)
        {
            Output("if exists (select * from dbo.sysobjects where id = object_id(N'["+tblName+"]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)");
            Output("drop table ["+tblName+"]");
            Output("GO");        
        }

        private void Output(string s)
        {    
            sBuilder.Append(s);
            sBuilder.Append(Environment.NewLine);
        }

创建表和生成insert语句的部分是使用了Mygeneration的模板CreateTable.zenus和SQL_DataInserts.zenus.
后来为了省事,就改了CreateTable.zenus模板,在Create Table之前加入如下代码:
if exists (select * from dbo.sysobjects where id = object_id(N'[<%=table.Name%>]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
 drop table [<%=table.Name%>]
GO 
修改后完整的Template Code代码如下:

<%
Public Class GeneratedTemplateClass GeneratedTemplate
            Inherits DotNetScriptTemplate

    Public Sub New()Sub New(context As ZeusContext)
        MyBase.New(context)
    End Sub

    '---------------------------------------------------
    ' Render() is where you want to write your logic    
    '---------------------------------------------------
    Public Overrides Sub Render()Sub Render
    
        Dim db as IDatabase
        Dim table As ITable
        Dim col as IColumn
        Dim IsFirst As Boolean
        Dim FK As IForeignKey
        Dim fkeys As New HashTable
        Dim PKIndex As IIndex    
    
        db = MyMeta.Databases(input.Item("cmbDatabase"))
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ''' Creating basic table structur.
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        For Each table in db.Tables
%>
if exists (select * from dbo.sysobjects where id = object_id(N'[<%=table.Name%>]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [<%=table.Name%>]
GO    
CREATE TABLE [<%=table.Name%>] (
<%
            IsFirst = True
            output.incTab()
            For Each Col in table.Columns
                If IsFirst = False Then
                    output.write( "," )
                    output.writeln("")
                End If
                output.autotab( CreateColumnScript( col ) )
                IsFirst = False
            Next
            output.decTab()
%>
)

GO

<%
            PKIndex = Nothing
            For Each FK In table.ForeignKeys
                If Not fKeys.ContainsKey( FK.Name ) Then
                    fKeys.Add( FK.Name, FK )
                End If
                If PKIndex Is Nothing AndAlso FK.PrimaryTable.Name = table.Name Then
                    PKIndex = table.Indexes( FK.PrimaryKeyName )
                End If
            Next

            If Not PKIndex Is Nothing Then
%>
ALTER TABLE [<%=table.Name%>] WITH NOCHECK ADD 
    CONSTRAINT [<%=PKIndex.Name%>] PRIMARY KEY  <%If PKIndex.Clustered Then output.write("CLUSTERED") %>
    (
<%
                IsFirst = True
                For Each col In PKIndex.Columns
                    If IsFirst = False Then
                        output.write(",")
                        output.writeln("")
                    End If
        
                    output.autotab("[" + col.Name + "]")
                    IsFirst = False
                Next
%>
    )  ON [PRIMARY] 
GO
<%
            End If
        Next

        For Each FK In fKeys.Values
%>
ALTER TABLE [<%=FK.ForeignTable.Name%>] ADD 
    CONSTRAINT [<%=FK.Name%>] FOREIGN KEY 
    (
        <%
            IsFirst = True
            For Each col In FK.ForeignColumns
                If IsFirst = False Then
                    output.write(",")
                    output.writeln("")
                End If
                
                output.autotab("[" + col.Name + "]")
                IsFirst = False
            Next
        %>
    ) REFERENCES [<%=FK.PrimaryTable.Name%>] (
        <%
            IsFirst = True
            For Each col In FK.PrimaryColumns
                If IsFirst = False Then
                    output.write(",")
                    output.writeln("")
                End If
                
                output.autotab("[" + col.Name + "]")
                IsFirst = False
            Next
        %>
    ) <%
        If FK.DeleteRule <> "NO ACTION" Then
            output.write( " ON DELETE " + FK.DeleteRule)
        End If
        If FK.UpdateRule <> "NO ACTION" Then
            output.write( " ON UPDATE " + FK.UpdateRule)
        End If
    %>
GO
<%
        Next


    End Sub

    Private Function CreateColumnScript()Function CreateColumnScript( ByVal col As IColumn ) As String
        Dim retStr As String

        retStr = "[" + col.Name + "] " + col.DataTypeNameComplete

        If col.IsAutoKey Then
            retStr += " IDENTITY ( " + col.AutoKeySeed.ToString() + "," + col.AutoKeyIncrement.ToString() + " )"
        End If

        If col.HasDefault Then
            retStr += " DEFAULT (" + col.Default + ")"
        End If

        If col.IsNullable Then
            retStr += " NULL"
        Else
            retStr += " NOT NULL"
        End If

        Return retStr
    End Function

End Class
%>

当然生成insert语句的时候对Image字段无法处理。
既然Mygeneration可以很好地完成我要的工作(项目中需要做数据库自动安装部分,就是开头提到的那个demo,当然还需要做很多完善的工作),我暂时也就懒得写自己的代码了,等有时间的时候也许我会重新写下的。
注:安装Mygeneration后,默认没有上面所提到的两个模板,你需要到mygeneration在线模板库下载,你可以通过浏览网页找到所需的模板,然后保存到指定目录,当然下面的方法也许更让你觉得方便很多:
download Templates from Mygeneration Online Template library

也许有朋友有更好的实现方法,希望能拿出来大家分享,谢谢!

Create Tables and Build inserts from Tables by using Mygeneration Templates(Sql Server)相关推荐

  1. 【翻译】基于 Create React App路由4.0的异步组件加载(Code Splitting)

    基于 Create React App路由4.0的异步组件加载 本文章是一个额外的篇章,它可以在你的React app中,帮助加快初始的加载组件时间.当然这个操作不是完全必要的,但如果你好奇的话,请随 ...

  2. SQL JOIN TABLES:在SQL Server中使用查询

    In this article, you will see how to use different types of SQL JOIN tables queries to select data f ...

  3. CREATE VIEW SQL:在SQL Server中使用索引视图

    This is the fourth article in a series of learning the CREATE VIEW SQL statement. So far, we have do ...

  4. CREATE VIEW SQL:通过SQL Server中的视图插入数据

    This is the third article in a series of learning the CREATE VIEW SQL statement. So far, I'd say tha ...

  5. sql 高级 (五)(create index(创建索引) drop)

    2019独角兽企业重金招聘Python工程师标准>>> SQL create index 语句 create  index语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据 ...

  6. 【opencv4】opencv教程 C++ 4、Mat对象(深拷贝:clone()、copyTo(),create()创建图片,zeros()、eye()初始化空白图像,Scalar()创建向量)

    上一讲:[opencv4]opencv视频教程 C++(opencv教程)3.矩阵的掩膜操作(filter2D) 下一讲:[opencv4]opencv视频教程 C++ 5.读写图像imread.im ...

  7. 用NFS挂载root出现:NFS: failed to create MNT RPC client, status=-101(-110)

    2014-02-18 08:06:17 By Ly #Linux 阅读(78) 评论(0) 错误信息如下: Root-NFS: nfsroot=/home/zenki/nfs/rootfs NFS: ...

  8. 项目开发日志:Build AssetBundle——SpriteAtlas(已解惑)

    项目信息: 平台-Android Unity编辑器版本-2018.2.5f1 状况1:真机状况下引用到图集下的sprite的UI显示出错.(图集被打成AB包且勾选了Include in Build). ...

  9. Jenkins Build Radiators(构建发射源)

    为什么80%的码农都做不了架构师?>>>    information radiators(信息发射源)的概念通常被用在敏捷的圈子里. 据敏捷专家Alistair Cockburn所 ...

最新文章

  1. iphone开发UITable内嵌不同风格Table
  2. 如何优化myeclipse.
  3. 铁路从未授权任何第三方平台售票服务,各大旅游网站哪来的接口?
  4. sed的选项与命令简要
  5. Dubbo 的设计思想,真优秀!
  6. C++ memset()函数和bzero()函数
  7. python 趋势线表达式_python添加趋势线
  8. 电脑桌面天气计算机备忘录,有什么桌面软件可以显示:时间,天气,还有备忘录的?...
  9. CSAPP Lab5--Writing a Dynamic Storage Allocator
  10. 学习pyton的第三天
  11. CAD软件中如何统一文字字高?
  12. 团队管理那点事,OKR绩效、核心人才、面试、技术分享、研发流程
  13. c# char unsigned_关于C ++:将unsigned char *复制到unsigned char *
  14. Web设计中的中国传统色彩速查表
  15. ELK搭建毫秒级响应社工裤
  16. html5外链式引入不了字体,css中导入外部字体不生效的原因是什么?
  17. 聚划算的下沉市场生意
  18. 二元一次方程组、三元一次方程组、四元一次方程组解析解(代码)
  19. 兄弟Brother MFC-8520DN 驱动
  20. Bugzilla 中文镜像网站

热门文章

  1. 网易邮箱开通imap服务器,网易邮箱率先全面默认开通IMAP服务
  2. 绘制多个折线图_学习笔记第一页 | 常用统计图绘制及描述规范
  3. 1 折限时团购!王牌讲师团年度精品课劲爆来袭​!
  4. 干货:如何在前端统计用户访问来源?
  5. 微信内测附近的餐厅,小程序要跨界外卖了?
  6. 【VMCloud云平台进阶篇】Monitor监控(一)
  7. 服务器上安装搭建node环境
  8. Linux中mount Windows中的共享文件夹
  9. 文科生的数据分析:亲测有效,真香!!!
  10. do not lie on the bed to watch pc or phones