使用SMO程序化生成SQL Server表数据「建议收藏」

使用SMO程序化生成SQL Server表数据「建议收藏」作为ETL的一部分,有时候就是需要把数据的Insert脚本生成出来,然后人肉拷贝到另一个地方执行。 熟悉SMSS的同学们都知道,有个生成脚本的任务,可以生成数据库的create脚本啊什么的,其实也能够

使用SMO程序化生成SQL Server表数据

作为ETL的一部分,有时候就是需要把数据的Insert脚本生成出来,然后人肉拷贝到另一个地方执行。

熟悉SMSS的同学们都知道,有个生成脚本的任务,可以生成数据库的create脚本啊什么的,其实也能够生产表中的数据。

自动化的ETL总不能连导出数据都人肉。。。一是容易出错,二是太low了。

C#控制台代码可以搞定这些,直接上代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management; 
using Microsoft.SqlServer.Management.Sdk.Sfc;  

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            String todayDate = DateTime.Now.Day + "_" + DateTime.Now.Month + "_" + DateTime.Now.Year;
            String backupDirectory = "1a:\DBBackup\";
            String backupFileName = backupDirectory + todayDate + ".sql";
            if (File.Exists(backupFileName))
            {

                File.Delete(backupFileName);

            }
            StreamWriter sw = File.CreateText(backupFileName);


            Console.WriteLine(backupFileName);
            Console.ReadKey();            
            Console.WriteLine("hello!");


            //Console.ReadLine();
            String dbName = "2oy"; // database name   
            Server srv = new Server("3lba1");

            // Reference the database.    
            Database db = srv.Databases[dbName];

            // Define a Scripter object and set the required scripting options.   
            Scripter scrp = new Scripter(srv);
           
            scrp.Options.ScriptSchema = false;
            scrp.Options.ScriptDrops = false;
            scrp.Options.WithDependencies = false;
            scrp.Options.Indexes = false;   // To include indexes  
            scrp.Options.DriAllConstraints = false;   // to include referential constraints in the script  
            scrp.Options.ScriptData = true; //Data include!!!!!!

            
        

            //Iterate through the tables in database and script each one.

            foreach (Table tb in db.Tables)
            {

                if (!tb.IsSystemObject)
                {

                    foreach (string s in scrp.EnumScript(new Urn[] { tb.Urn }))
                    {

                        sw.WriteLine(s);

                        sw.Flush();

                    }

                }

            }


            /*
             * 此方法不能生成带数据的脚本,但是可以生成schema脚本
            foreach (Table tb in db.Tables)
            {
                System.Collections.Specialized.StringCollection sc = scrp.Script(new Urn[]{tb.Urn}); 

                foreach (string st in sc)
                {
                    Console.WriteLine(st);
                }
                Console.WriteLine("--");

            }
             */
             
        }
    }
}

代码100分

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9159.html

(0)
上一篇 2023-02-14
下一篇 2023-02-14

相关推荐

  • 华为数据库,安全的保障是什么_数据库安全保障

    华为数据库,安全的保障是什么_数据库安全保障现今形势多变,行业竞争激烈,经常有恶意攻击的,并且攻击方式复杂多变,所以企业数据库的安全可靠尤为重要,选什么杨的数据库好?哪家好,这里就对华为云数据做个评测。感兴趣的可以看看。 云数据库天然具备稳定可

    2023-05-11
    149
  • mongodb单表百亿_vue拖拽表单生成器

    mongodb单表百亿_vue拖拽表单生成器上一篇笔记仅是记录了一下简单的关联查询,根据笔记中的场景:将某一车辆关联的耗损记录全部放在了一个字段当中。不知道现在中有没有这种场景,我们的应用中没有类似的场景,可能我们更关注的是某车辆的总耗损金额和

    2022-12-17
    138
  • mysql全表扫描会加锁吗_查询mysql数据库状态

    mysql全表扫描会加锁吗_查询mysql数据库状态1. mysql排序问题 一直以为mysql是按照主键排序的,实则排序和主键没有关系(不使用 order by 子句)。 然后从 stackoverflow 上查了一下,找到了以下的回答: 没有默认的

    2023-05-17
    143
  • Ubuntu下安装Anaconda的教程

    Ubuntu下安装Anaconda的教程 Anaconda是一个常用的Python发行版,它包含了Python解释器、常用的Python库和工具,以及Jupyter notebook等。Anaconda可以在多个操作系统下运行,包括Windows、Linux和Mac OS,本文主要介绍如何在Ubuntu下安装Anaconda。

    2024-08-25
    28
  • mysql 如何实现读写分离_rac数据库数据读写

    mysql 如何实现读写分离_rac数据库数据读写Amoeba+Mysql实现数据库读写分离 一、Amoeba 是什么 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB

    2023-05-31
    138
  • 谓词推理公式_谓词的项,谓词的阶

    谓词推理公式_谓词的项,谓词的阶今天有个小伙伴问我,什么是谓词下推,然后我就开启巴拉巴拉模式,说了好长一段时间,结果发现他还是懵的。 最后我概述给他一句话:所谓谓词下推,就是将尽可能多的判断更贴近数据源,以使查询时能跳过无关的数据。

    2023-05-31
    146
  • 大数据批量键值查询怎样才会更快

    大数据批量键值查询怎样才会更快一般选择数据库来存放数据,并借助数据表的索引来加快检索速度。利用索引查找数据,即使数据总量达到有10亿,对于单条记录的查找效率大约在数十毫秒(复杂度为LogN)。但是,如果需要查询的键值很多,比如多…

    2023-03-12
    152
  • 将Django模型转换为字典,方便数据处理

    将Django模型转换为字典,方便数据处理a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-03-09
    74

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注