Điều này đã làm việc cho tôi trong linqpad:(sau khi thêm một tham chiếu nuget vào "Microsoft.SQLServer.SMO"
được sao chép và sửa đổi từ câu trả lời tại: Bảng tập lệnh dưới dạng TẠO ĐẾN bằng cách sử dụng vb.net
Tôi đã gặp sự cố khi cố truy cập vào Tables ["[exd]. [ABCINDICATORSET]"], không thể tìm ra cách chỉ định bảng và miền đúng cách, tôi luôn nhận được giá trị trống.
// Define your database and table you want to script out
string dbName = "Ivara77Install";
// set up the SMO server objects - I'm using "integrated security" here for simplicity
Server srv = new Server();
srv.ConnectionContext.LoginSecure = true;
srv.ConnectionContext.ServerInstance = ".";
// get the database in question
Database db = new Database();
db = srv.Databases[dbName];
StringBuilder sb = new StringBuilder();
// define the scripting options - what options to include or not
ScriptingOptions options = new ScriptingOptions();
options.ClusteredIndexes = true;
options.Default = true;
options.DriAll = true;
options.Indexes = true;
options.IncludeHeaders = true;
// script out the table's creation
Table tbl = db.Tables.OfType<Table>().Single(t => t.Schema.ToLower() == "exd" && t.Name.ToLower() == "ABCINDICATORSET".ToLower() );
StringCollection coll = tbl.Script(options);
foreach (string str in coll)
{
sb.Append(str);
sb.Append(Environment.NewLine);
}
// you can get the string that makes up the CREATE script here
// do with this CREATE script whatever you like!
string createScript = sb.ToString();
Một số sql hơi dài dòng hơn những gì bạn nhận được từ máy chủ sql khi bạn thực hiện Script Table As -> Create To -> New Query Editor Window
Những thay đổi để làm cho nó gần hơn với những gì máy chủ sql tạo ra là:
//options.Indexes = true;
options.IncludeHeaders = true;
options.NoCollation = true;