![](/img/trans.png)
[英]Converting a DataTable to an CREATE TABLE + INSERT script for SQL in C#
[英]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.