如何使用T-SQL脚本备份SQL Server 2008中的特定表


Answers:


11

备份类型取决于SQL Server恢复模型。每个恢复模型都允许您备份整个或部分SQL Server数据库或数据库的单个文件或文件组。无法创建表级备份,没有这样的选项。但是有一个解决方法

使SQL Server中的SQL Server表备份成为可能。有各种其他方法可以在sql SQL Server中备份表

  1. BCP(批量复制程序)
  2. 用数据生成表脚本
  3. 使用SELECT INTO复制表
  4. 将表数据直接保存在平面文件中
  5. 使用SSIS将数据导出到任何目的地

在这里,我只解释您可能会知道的第一个休息

方法1 –使用BCP备份sql表(批量复制程序)

要备份驻留在SQL Server AdventureWorks中的名为“ Person.Contact”的SQL表,我们需要执行以下脚本,该脚本

-- SQL Table Backup
-- Developed by DBATAG, www.DBATAG.com
DECLARE @table VARCHAR(128),
@file VARCHAR(255),
@cmd VARCHAR(512)
SET @table = 'AdventureWorks.Person.Contact' --  Table Name which you want    to backup
SET @file = 'C:\MSSQL\Backup\' + @table + '_' + CONVERT(CHAR(8), GETDATE(), 112) --  Replace C:\MSSQL\Backup\ to destination dir where you want to place table data backup
+ '.dat'
SET @cmd = 'bcp ' + @table + ' out ' + @file + ' -n -T '
EXEC master..xp_cmdshell @cmd

输出值

在此处输入图片说明

注意 -

  1. 您必须具有批量导入/导出权限
  2. 在上面的脚本中,-n表示本机SQL数据类型,这是还原期间的关键
  3. -T表示要使用Windows身份验证连接到SQL Server,如果要使用SQL Server身份验证连接,请使用-U -P
  4. 这也将告诉您,您加快了数据传输的速度,在我的情况下,这是每秒212468.08行。
  5. 该命令完成后,将创建一个名为“ AdventureWorks.Person.Contact_20120222”的文件,它是指定的目标文件夹。

或者,您可以通过命令提示符运行BCP并在命令提示符中键入以下命令,这两个操作都执行相同的活动,但是我喜欢上述方法,因为在打开命令提示符和键入时是保存类型。

bcp AdventureWorks.Person.Contact out C:\MSSQL\Backup\AdventureWorks.Person.Contact_20120222.dat -n -T

在此处输入图片说明


9

方法1:

如果仅关注表中的数据,并且只关心在同一数据库和服务器中本地使用的数据,则可以使用以下查询来备份所选表:

SELECT * INTO newtable1
FROM originalTable1

-表2

SELECT * INTO newtable2
FROM originalTable2

依此类推...对于n个表

该语句将创建名为newtable1,newtable1 ...的表,因此您不必先前创建它。

注意*此方法可以非常快速地执行备份,但是主要缺点是它不会继承表的键,索引和约束,并且备份存储在数据库中而不是文件外部

方法2:

如果要将表备份到其他服务器以进行任何灾难恢复解决方案或防止数据丢失,则可以使用“任务”中的“生成脚本”选项对表进行脚本编写。

  1. 首先,右键单击包含要备份的表的数据库,然后选择“任务”->“生成脚本”

  2. 从列表中选择您要备份其表的数据库

  3. 出现的下一个屏幕是脚本选项。

  4. 向下滚动脚本选项,直到看到“表/视图选项”。我们希望以下内容是正确的:检查约束,脚本数据,外键,主键,触发器和唯一键。(或者,您当然可以选择所需的任何东西)。选择下一步,我们将看到选择对象类型屏幕

  5. 选择表,然后单击下一步。最后,选择要备份的表,然后单击下一步

方法3:

您也可以将bcp实用程序用于表备份。


1

您不能将特定表备份到.bak文件,可以将它们导出到csv或将其脚本化或使用bcp将它们放入文件中。

如果要备份特定的表(它们始终是相同的),该怎么办就是将它们移到一个单独的file group文件中并备份该文件组。

有关文档,请参阅备份文件和文件组

例如,如果要使用T-SQL备份特定文件或文件组,可以使用(从链接)

--Back up the files in SalesGroup1.
BACKUP DATABASE Sales
   FILEGROUP = 'SalesGroup1',
   FILEGROUP = 'SalesGroup2'
   TO DISK = 'C:\MySQLServer\Backups\Sales\SalesFiles.bck';
GO

--Backup the files in the SalesGroup1 secondary filegroup.
BACKUP DATABASE Sales
   FILE = 'SGrp1Fi2', 
   FILE = 'SGrp2Fi2' 
   TO DISK = 'G:\SQL Server Backups\Sales\SalesGroup1.bck';
GO

1
不幸的是,您必须一起备份所有读/写文件组,因此您不能仅选择一个。
卡米尔·高斯敏斯基

1

基于KASQLDBA的响应的方法1:

创建一个单独的数据库来保存表的备份副本。修改KASQLDBA提供的查询,以便您从原始表中选择并复制到备用数据库。

SELECT * INTO MyNewDatabase.dbo.newtable1
FROM OriginalDatabase.dbo.originalTable1

--- For table 2
SELECT * INTO MyNewDatabase.dbo.newtable2
FROM OriginalDatabase.dbo.originalTable2

您可以创建一个脚本,将表拖放到新数据库中,然后对每个必需的表运行select into命令。如果希望有可用的索引和其他对象,则可以在新数据库上构建索引并截断表,然后再重新填充它们。如果您喜欢截断,则需要使用插入语句代替select into。

此选项将为您提供一种创建.BAK文件的方法。在新数据库中填充表之后,您只需运行备份数据库命令。


1

使用SSMS的批量导出功能,这里是提到的最佳和最简单的方法

SQL Server导入和导出向导: SQL Server导入和导出向导在SQL Server Integration Services(SSIS)程序包上提供了图形用户界面。创建包后,可以将其自动化,以按计划运行。可以使用SQL Server数据工具(SSDT)对其进行进一步配置和修改。

首先,打开导入和导出向导,右键单击数据库,然后选择任务子菜单->导出数据命令。

在此处输入图片说明


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能无效。- 评分
kevinsky

@kevinsky好的!但是至少您应该投票赞成!
Sayyed Dawood

-1

另一种方法是使用script / sproc:DumpDataFromTable.sql,来自:https : //github.com/Zindur/MSSQL-DumpTable/tree/master/Scripts

 EXECUTE [dbo].[DumpDataFromTable] @SchemaName = 'dbo', @TableName = 'Table', @PathOut = 'c:\temp\Scripts'

您必须传递:模式名称和表名称,然后是将保存创建的脚本的输出路径(注释文件夹必须已经创建/存在,并且sql具有权限,请参见sproc中的注释)。

并且,如果您愿意,可以向表中添加一个条件(过滤器目前必须以AND开头)


这个过程取决于缺少的程序PRC_WritereadFile
SubqueryCrunch

-2

从SQL Server 2008中的数据库备份单个表及其数据:

SELECT * INTO  [dbo].[tbl_NewTable] 
FROM [dbo].[tbl_OldTable]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.