2011-05-17 125 views
2

我正在开发一个C#应用程序,我想要一个窗口,显示数据库中的所有现有表用户选择表想要重新创建一个新的数据库在SQL压缩,一些表必须包含初始信息,而其他表只包含表的结构。从c#数据库生成脚本

是否有任何帮助来重新创建此表?

我认为要生成现有表(* .sql)的脚本并从文件创建表到新的数据库,但我不知道如何进行查询来生成一个sql表。

PS:现有的表在sqlserver中,我想在sqlcompact中创建一个表。

回答

0

看一看下面的观点:

Information_Schema.TABLES 
Information_Schema.COLUMNS 
Information_Schema.REFERENTIAL_CONSTRAINTS 
Information_Schema.TABLE_CONSTRAINTS 
Information_Schema.KEY_COLUMN_USAGE 

我没有代码手(对不起),但我已经使用过这些表定义基于数据库本身之前重新创建元数据在纯粹的TSQL中,而且没有理由在应用程序中也不能在C#中完成。将它们联合在一起,为最终定义声明一个字符串,并通过结果集来获取表中所有字段,构建输出。完成后,将其返回给客户端。出于测试目的,将您的代码输出与您在SSMS生成的脚本创建表时相比较,希望您能够相对快速地重新创建表定义。

0

您可以使用SMO来做到这一点。

SQL Server Management Objects

一个简单的例子是在这里:

http://www.sqlservercentral.com/articles/SMO/scriptdatabaseobjectswithsmo/2342/

+0

thx为链接,我已经改变了StoredProcedure sourceSp = myDB.StoredProcedures [“sp_testScript”];由表sourceSp = myDB.Tables [“My_table”];但我必须知道如何阅读表的结构和他的记录 – Akrem 2011-05-17 19:43:25

+0

和Table sourceSp = myDB.Tables [“My_table”]的查询不做PRIMARY KEY! – Akrem 2011-05-17 20:08:28

0

我不知道differences between Sql Server and Sql Server CE但你可以使用SQL Server Management Studio来生成表,过程等,右击脚本到数据库,然后选择任务>生成脚本。

据我所知大部分不支持的功能是查询,过程,视图...

+0

我知道,管理工作室可以做到这一点,但我想从C#做到这一点从应用程序:用户可以选择导出 – Akrem 2011-05-17 19:47:38

+0

@Akrem:您可以使用SqlBulkCopy复制数据,但我不确定表结构http://www.codeproject.com/KB/database/SqlBulkCopy.aspx – 2011-05-17 21:41:40

0

如果您正在使用NHibernate的数据访问,他们有一个很好的SchemaExport工具,将通过NHibernate的支持所有数据库工作(不只是SQL Server)。因此,您的解决方案是列出所有映射的实体,让用户选择他想要的,使用选定的实体创建一个新的配置,并使用SchemaExport以您想要的方言生成SQL。

0

您可以使用我的脚本API /库以适当的SQL Server Compact方言生成CREATE TABLE脚本。 SMO无法为你做到这一点,它针对各种SQL Server版本。 http://exportsqlce.codeplex.com