我想用所有对象和数据备份SQL Server数据库,但所有表中的数据应限制为每个表100行。我可以很容易地在mysql中执行此操作但在SQL Server中我不知道该怎么做??
答案 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)
你可以试试这个解决方案
请创建数据库副本
在数据库副本中执行以下代码,以删除行数超过100行的行。
sp_msforeachtable
'ALTER TABLE? NOCHECK CONSTRAINT ALL
; [DUMMYTABLE] AS
(SELECT RN = ROW_NUMBER()OVER(ORDER BY NEWID()),* FROM?)
从[DUMMYTABLE] DELERE RN>中删除100
更改表?检查约束所有'
备份新数据库。
限制: 在我们禁用约束并从数据库中删除行时,备份数据库的数据完整性出现问题。