在 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 的人来说非常方便。再次感谢所有回答的人。