如何在每个表中备份100行数据库?

时间:2012-06-06 11:27:36

标签: sql-server

我想用所有对象和数据备份SQL Server数据库,但所有表中的数据应限制为每个表100行。我可以很容易地在mysql中执行此操作但在SQL Server中我不知道该怎么做??

3 个答案:

答案 0 :(得分:4)

您无法真正使用明确的BACKUP DATABASE。但是你可以这样做 - 但请记住 - 如我的评论中所说 - 如果你依赖任何类型的数据完整性,这些数据将是有限的用途,因为排序将是相对任意的,除非一切都是1:1而且你碰巧在所有查询上获得了神奇的方便排序,它只是一个巨大的数据大杂烩:

CREATE DATABASE copy_of_original;
GO

USE original_db;
GO

DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';

-- this assumes all tables are in `dbo` schema:
SELECT @sql = @sql + CHAR(13) + CHAR(10)
  + 'SELECT TOP (100) * INTO copy_of_original.dbo.' 
  + QUOTENAME(name) + ' FROM dbo.' + QUOTENAME(name) + ';'
FROM sys.tables
WHERE schema_id = 1;

PRINT @sql;
-- EXEC sp_executesql @sql;

完成此操作后,您可以备份copy_of_original - 但请记住,原始数据库中不会出现任何索引或约束,TOP将选择每个表中的任意100行(或整个表,对于少于100行的小表)。

答案 1 :(得分:0)

使用SQL Server,我会使用“bcp”工具

这需要一些编码:为每个表生成前100个select语句并创建批处理文件

答案 2 :(得分:0)

你可以试试这个解决方案

  1. 请创建数据库副本

  2. 在数据库副本中执行以下代码,以删除行数超过100行的行。

    sp_msforeachtable
    'ALTER TABLE? NOCHECK CONSTRAINT ALL ; [DUMMYTABLE] AS (SELECT RN = ROW_NUMBER()OVER(ORDER BY NEWID()),* FROM?)  从[DUMMYTABLE] DELERE RN>中删除100  更改表?检查约束所有'

  3. 备份新数据库。

  4. 限制: 在我们禁用约束并从数据库中删除行时,备份数据库的数据完整性出现问题。