更新时间:2023-02-07 12:22:13
对以下内容进行了测试:
The following was tested on:
所需的程序集引用:
我创建了一个简单的Win窗体应用程序,单击确定按钮并调用了以下功能。
I created a simple Win forms app with OK button and called below function.
注意:如果要脚本化视图,则需要添加
Note: If scripting out views you need to add
if( myView.IsSystemObject == true ) continue;
确保不编写系统视图脚本;我还没有测试。对于旧版本的SQL Server,您可能还需要检查表。
to ensure that system views are not being scripted; I have not tested this. For old versions of SQL Server you may also need this check for tables as well.
public static string ScriptDatabase( string dbConnectionString, string databaseName )
{
SqlConnection conn = new SqlConnection( dbConnectionString );
ServerConnection serverConn = new ServerConnection( conn );
var server = new Server( serverConn );
var database = server.Databases[ databaseName ];
var scripter = new Scripter( server );
scripter.Options.IncludeIfNotExists = true;
scripter.Options.ScriptSchema = true;
scripter.Options.ScriptData = true;
string scrs = "";
foreach( Table myTable in database.Tables )
{
foreach( string s in scripter.EnumScript( new Urn[] { myTable.Urn } ) )
scrs += s + "\n\n"; ;
}
return ( scrs );
}
该函数的调用方式如下:
Function would be called as follows:
// Connection string for local SQL Server default instance
ScriptDatabase( "Server=.;Database=PlayGround;Trusted_Connection=True;", "PlayGround" );
输出:
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tBlah]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[tBlah](
[ID] [int] IDENTITY(1,1) NOT NULL,
[tID] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
[Value] [varchar](20) COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY]
END
SET IDENTITY_INSERT [dbo].[tBlah] ON
INSERT [dbo].[tBlah] ([ID], [tID], [Value]) VALUES (1, N'2', N'1234')
INSERT [dbo].[tBlah] ([ID], [tID], [Value]) VALUES (2, N'2', N'345.6')
MSDN参考:
更新至2019年12月17日:检查最新的.NET版本;添加了必需的参考;清理示例代码;添加了示例conn字符串
Updated 17-Dec-2019: Check with latest .NET version; Added required References; Clean-up example code; Added sample conn string