0

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

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

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

4

1 回答 1

3

您可以为此使用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();
        }
    }
}
于 2010-09-03T11:07:06.173 回答