从 ADO.NET 生成 SQL Server 表架构的代码

发布于 2024-09-17 17:46:34 字数 288 浏览 3 评论 0原文

我很想使用 ADO.NET 生成 CREATE TABLE 脚本来创建给定表的精确副本。

其原因是持久性测试。我想知道我的应用程序是否会持久保存到特定数据库。我希望能够将应用程序指向有问题的数据库和表,然后应用程序将生成一个新数据库,其中包含指定表的精确副本。因此,可以对克隆表进行持久性测试,而无需触及原始数据库,并且当我完成后,可以简单地删除新数据库。

在开始这个雄心勃勃的项目之前,我想知道是否已经存在任何东西。我已经尝试过 Google,但我能找到的只是通过 SSMS UI 而不是通过代码来获取模式生成 SQL 的方法。

I'd quite like to use ADO.NET to generate a CREATE TABLE script to create an exact copy of a given table.

The reason for this is persistence testing. I would like to know whether my application will persist to a particular database. I would like to be able to point the app to the database and table in question, and then the app will generate a new database with an exact copy of the specified table. Thus, persistence testing can take place against the cloned table without touching the original database, and when I'm done the new database can simply be dropped.

Before I embark on this ambitious project, I would like to know if anything already exists. I've tried Google, but all I can find are ways to get schema generation SQL through the SSMS UI, not through code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

腹黑女流氓 2024-09-24 17:46:34

为此,您可以使用 SQL 管理对象 (SMO)。

示例(C#)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.SqlServer.Management.Smo;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Server srv = new Server(@".\SQLEXPRESS");
            Database db = srv.Databases["MyDB"];

            Scripter scrp = new Scripter(srv);
            scrp.Options.ScriptDrops = false;
            scrp.Options.WithDependencies = true;

            //Iterate through the tables in database and script each one. Display the script. 
            //Note that the StringCollection type needs the System.Collections.Specialized namespace to be included. 
            Microsoft.SqlServer.Management.Sdk.Sfc.Urn[] smoObjects = new Microsoft.SqlServer.Management.Sdk.Sfc.Urn[1];
            foreach (Table tb in db.Tables)
            {
                smoObjects[0] = tb.Urn;
                if (tb.IsSystemObject == false)
                {
                    System.Collections.Specialized.StringCollection sc;
                    sc = scrp.Script(smoObjects);
                    foreach (string st in sc)
                        Console.WriteLine(st);
                }
            }
            Console.ReadKey();
        }
    }
}

You can use SQL Management Objects (SMO) for this.

Example (C#)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.SqlServer.Management.Smo;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Server srv = new Server(@".\SQLEXPRESS");
            Database db = srv.Databases["MyDB"];

            Scripter scrp = new Scripter(srv);
            scrp.Options.ScriptDrops = false;
            scrp.Options.WithDependencies = true;

            //Iterate through the tables in database and script each one. Display the script. 
            //Note that the StringCollection type needs the System.Collections.Specialized namespace to be included. 
            Microsoft.SqlServer.Management.Sdk.Sfc.Urn[] smoObjects = new Microsoft.SqlServer.Management.Sdk.Sfc.Urn[1];
            foreach (Table tb in db.Tables)
            {
                smoObjects[0] = tb.Urn;
                if (tb.IsSystemObject == false)
                {
                    System.Collections.Specialized.StringCollection sc;
                    sc = scrp.Script(smoObjects);
                    foreach (string st in sc)
                        Console.WriteLine(st);
                }
            }
            Console.ReadKey();
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文