【发布时间】:2013-06-24 17:42:51
【问题描述】:
在 SQL Server 2008 R2 中,用户可以通过右键单击数据库并选择 Tasks 和 Generate Scripts 来编写包含数据的表。将弹出一个向导,询问用户他们想要什么(多个表、一个表等)以及一些高级选项(允许用户获取表模式和数据);如有问题,see this useful post of what's being done(在“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 created 的类似脚本中得到这个想法)。无论如何,这个解决方案也有效,并且对于更熟悉 TSQL 的人来说非常方便。再次感谢所有回答的人。
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
标签: c# sql-server ssms smo