如何使用 .NET 2.0 以编程方式复制 SQL Server 2000 表?
我想备份一个表,以其他名称将副本保存在同一数据库中。 我想使用 .NET 2.0(最好是 C#)以编程方式完成此操作。 有人可以指出我应该做什么吗?
I want to backup a table saving the copy in the same database with another name. I want to do it programatically using .NET 2.0 (preferably C#). Someone can point me what should I do?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
只需将此查询发送到服务器:
这将从头开始创建备份表(如果它已经存在,则会抛出错误)。 对于大桌子,请做好等待时间的准备。 这应该模仿数据类型、排序规则和 NULL 性(NULL 或 NOT NULL),但不会复制索引、键或类似约束。
如果您需要帮助将 SQL 查询发送到数据库,那就是另一个问题了。
Just send this query to the server:
This will create the backup table from scratch (an error will be thrown if it already exists). For large tables be prepared for it to take a while. This should mimic datatypes, collation, and NULLness (NULL or NOT NULL), but will not copy indexes, keys, or similar constraints.
If you need help sending sql queries to the database, that's a different issue.
实现此目的的一种方法是使用 SQL 中的 INTO 以这种方式简单地执行普通查询:
这会自动创建一个新表并插入旧表的行。
另一种方法是使用
System.Data.SqlClient
命名空间中的 SqlBulkCopy。 有一篇不错的 CodeProject 文章解释了如何执行此操作:SQL Bulk Copy with C#.Net< /a>
代码非常简单:
One way to do this would be to simply execute a normal query this way using INTO in SQL:
This automatically creates a new table and inserts the rows of the old one.
Another way would be to use SqlBulkCopy from the
System.Data.SqlClient
namespace. There is a nice CodeProject article explaining how to do this:SQL Bulk Copy with C#.Net
The code is pretty straightforward:
您可以使用SQL Server 管理对象 (SMO< /a>)。 您可以制作数据库的副本(数据和模式)。 您可以设置很多选项。 以下示例复制整个数据库:
您可以在以下位置找到传输类的文档: MSDN。
You could use the SQL Server Management Objects (SMO). You could make a copy of a database (data and schema). There are a lot of options you can set. The following example copies the entire database:
You can find the documentation of the Transfer Class on MSDN.
根据表中记录的数量,从 C# 和用户界面执行此操作可能是一个非常糟糕的主意。
对于小桌子来说
使用以下 SQL
创建表 table2 (field1 int, field2 varchar(10)) --当然使用实际的字段名称和数据类型)
insert into table2 (field1, field2)
select field1, field2 from table1
我建议创建表创建一次然后插入,这样您就可以多次向表中添加记录。 选择进入只会工作一次。
Depending on how many records in the table this could be a very bad idea to do from C# and the user interface.
For a small table
use the following SQL
Create table table2 (field1 int, field2 varchar(10)) --use the actual field names and datatypes of course)
insert into table2 (field1, field2)
select field1, field2 from table1
I suggest the create table to create it once and then the insert so that you can add records to the table multiple times. Select into only will work once.
至少,您可以执行“SELECT * INTO NEWTable FROM OldTable”。
您想创建所有索引/约束等吗?
编辑:添加到 splattne 的注释中,您将必须获取要复制的表的表实例的句柄。 使用 Script 方法获取它将生成的脚本。 修改脚本字符串以用新名称替换旧名称& 在数据库上运行它。
编辑2: http://msdn。 microsoft.com/en-us/library/microsoft.sqlserver.management.smo.table.table.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.tableviewtabletypebase.script.aspx
At the very least, you could do "SELECT * INTO NEWTable FROM OldTable".
Do you want to create all the indexes/constraints etc?
EDIT: Adding to splattne's comments, you will have to get the handle to Table instance of the table you wish to copy. Use the Script method to get the script it will generate. Modify the script string to replace old names with new names & run it on the DB.
EDIT2: http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.table.table.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.tableviewtabletypebase.script.aspx