繁体   English   中英

基于数据表C#创建SQL表

[英]Create SQL Table based on Datatable C#

我已经搜寻了很长时间,没有任何有用的答案。

我面临的问题是从SQL表中取出一些行并创建一个新的SQL表,以将它们存储在其他数据库中,以便稍后对其进行快速计算。 原始表有超过一百万行,而我要取出的行数不超过2,000。 该表有277列,并且可能会定期更改,因此我需要在运行时生成新表来复制架构。

我现在正在使用MVC 5和Sql Server 2008。

我尝试使用linq取出数据,但无法将数据推回SQL Server。

我还尝试使用Select * from Table Where 1 = 0取出模式,这给了我一个空的数据表,但是它仍然存在,可以基于该模式创建新表。

我现在正在尝试根据数据类型创建所需的SQL。 这是一项艰巨的任务,我强烈感到有人可能已经做到了。

是否有一些不常见的现成软件包或方法来执行此任务? 我搜索的一些问题大约在9年前出现,我希望目前对此有所帮助。

最理想的方法是使用linq查询结果,并将IQueryable推回数据库以创建新表。

请帮忙。

您可以像这样使用SELECT INTO来做到这一点:

SELECT * INTO TableToCopyTo FROM TableToCopyFrom

这会将TableToCopyFrom所有行复制到新创建的TableToCopyTo ,但是如果TableToCopyTo已经存在,这将引发异常。
同样,这将不会为TableToCopyTo创建任何键和索引。

如果您的数据库位于不同的SQL Server上,则此答案可能对您有用https://stackoverflow.com/a/603518/6064728

不知道我是否理解您,但是如果源数据库和目标数据库中表的架构相同,则不能仅使用: SqlBulkCopy.WriteToServer

您可以查询源数据并将其放入DataTable或使用IDataReader流传输。

这在linqpad中对我有用:(添加了对“ Microsoft.SQLServer.SMO”的nuget引用后

通过使用vb.net从以下位置的答案复制和修改: 脚本表为CREATE TO

我在尝试访问Tables [“ [exd]。[ABCINDICATORSET]”]时遇到了麻烦,无法弄清楚如何正确指定表和域,我总是返回null。

// 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();

当您执行“脚本表为”->“创建至”->“新建查询编辑器”窗口时,某些sql比从sql server得到的详细得多

为了使其更接近sql server生成的更改是:

//options.Indexes = true;
options.IncludeHeaders = true;
options.NoCollation = true;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM