5

在 SQL Server 2008 R2 中,用户可以通过右键单击数据库,选择Tasks和来编写包含数据的表Generate Scripts。将弹出一个向导,询问用户他们想要什么(多个表、一个表等)以及一些高级选项(允许用户获取表模式和数据);如有问题,请参阅这篇关于正在做什么的有用帖子(在“The Handy”下)。

不幸的是,SQL Server 没有生成这些脚本的脚本,有时我们必须编写一些包含所有数据的表。我认为不是每次都手动执行此操作,而是让 C# 应用程序为测试表调用这些进程并为包含所有数据的表生成脚本,并将其保存为本地文件会更容易。

当我使用 时SqlConnection,我没有看到执行此类任务的选项(尽管它可能与其他任务有关)。该向导如何访问?

更新:在最初的回答之后,我认为这是不可能的,所以我为那些更熟悉 TSQL 的人制定了一个有趣的解决方案。我创建了一个类似于下面的存储过程:

CREATE PROCEDURE usp_ScriptTableAndData
AS
BEGIN

    CREATE TABLE ScriptTemp(
        Value VARCHAR(8000)
    )

    INSERT INTO ScriptTemp
    SELECT '/*   Build the Reference Table   */'

    INSERT INTO ScriptTemp
    SELECT 'USE [DB]
        GO

        SET ANSI_NULLS ON
        GO

        SET QUOTED_IDENTIFIER ON
        GO

        SET ANSI_PADDING ON
        GO

        CREATE TABLE [dbo].[Table](
            [ID] [int] IDENTITY(1,1) NOT NULL,
            [Reference] [varchar](50) NULL,
            [TableDate] [datetime] NOT NULL,
            [Display] [bit] NULL
        )

        SET ANSI_PADDING OFF
        GO


        INSERT INTO ScriptTemp
        SELECT '/*   Insert the Table Values    */'

        INSERT INTO ScriptTemp
        SELECT 'INSERT INTO Table VALUES(' + CAST(ID AS VARCHAR(3)) + 
            ',' + '''' + LTRIM(RTRIM(ISNULL(Reference,'NULL'))) + '''' + 
            ',' + '''' + CONVERT(VARCHAR(25),TableDate,120) + '''' + 
            ',' + ISNULL(CAST(Display AS VARCHAR(4)),'NULL') + ')'
        FROM dbo.Table

        EXECUTE xp_cmdshell 'BCP "SELECT * FROM DB.dbo.ScriptTemp" queryout "\\FileSharePath\Script.sql" -T -c -SSERVER'

        DROP TABLE ScriptTemp
END

这将创建一个包含表和数据的脚本(我从Bill Fellows 创建的类似脚本中得到了这个想法)。无论如何,这个解决方案也有效,并且对于更熟悉 TSQL 的人来说非常方便。再次感谢所有回答的人。

4

4 回答 4

3

您应该查看SQL Server Management Objects (SMO)。我以前用它在 .NET 应用程序中创建自定义脚本,但我不确定它是否支持数据脚本。

来自 MSDN:

SQL Server 管理对象 (SMO) 是为 Microsoft SQL Server 的编程管理而设计的对象。您可以使用 SMO 构建自定义的 SQL Server 管理应用程序。

于 2013-06-24T19:17:24.520 回答
2

该向导是 SQL 管理控制台的一项功能,只能从那里使用。它不是SqlConnection类的一部分,也不是 .NET Framework 本身的任何部分。

这有点像在代码中实例化 Word 自动化对象时询问字体对话框在哪里。

于 2013-06-24T17:45:49.507 回答
1

脚本化模式的功能不在 sql 库中,它在 Visual Studio 库中。

例如 Microsoft.Data.Schema.ScriptDom.Sql、Microsoft.Data.Schema.ScriptDom;

Visual Studio 团队/一个叫 Gert Drapers 的人 http://blogs.msdn.com/b/gertd/ 开发了一个叫做 Visual Studio Team System 2008 数据库版本的东西——现在已经被遗忘了,但它仍然隐藏在 VS2010 和 VS2012 中企业版(或现在所说的)。您可以比较数据库中的模式和数据,他们是如何做到的?微软为此编写了大量的类,您可以使用它们。

有很多未开发的功能,当然这并不能直接回答你的问题,(SMO)但希望它能让你知道它是可能的,并且其他人已经完成了大部分工作。

你见过 SQLPackage.exe 吗?这会将架构和数据全部打包到一个 zip 文件中。

于 2013-06-26T20:49:52.227 回答
0

您可以使用 SQL Server Management Studio 执行此操作。右键单击数据库实例->任务->生成脚本->然后填充介绍和填充对象(在其中选择您想要数据脚本的表)->现在在设置脚本选项中->单击高级,然后在常规部分->设置要脚本化为仅来自模式的数据的数据类型。您将获得完整的数据脚本作为所选位置。

于 2013-06-24T18:04:03.310 回答