我想生成一个脚本,它会给我一个"插入"查询来自我现有数据库的数据,但只有每个表中按ID排序的前1000行。 我试图通过使用"生成脚本来生成单个表的查询..."它位于Management Studio(MyDatabaseName - > Tasks - > Generate scripts ...)然后我在C#中编写了一个简单的函数,它将数据剪切为1000行,但是当你使用它时不是一个好主意有数百个表
List<string> script = File.ReadLines(@"script.sql").Take(1000).ToList();
File.WriteAllLines(@"top1000.sql", script);
答案 0 :(得分:1)
下面的脚本将为源数据库中的所有表生成语句,以便将1000个随机记录复制到另一个空数据库。
请注意&#34;选择*插入...&#34;语句仅在目标表不存在时才有效。
ORDER BY使用表的主键 如果有的话。
SELECT CONCAT('SELECT ',
'TOP 1000 ',
'* INSERT INTO ',
'[TargetDb]', -- replace with the name of the database you want to copy to
'.',QUOTENAME(t.TABLE_NAME),
' FROM ',QUOTENAME(t.TABLE_SCHEMA),'.',QUOTENAME(t.TABLE_NAME),
' ORDER BY ' + QUOTENAME(k.PrimaryKeyName),';'
) as InsertStatement
FROM INFORMATION_SCHEMA.TABLES t
LEFT JOIN (
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME as PrimaryKeyName
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE OBJECTPROPERTY(OBJECT_ID(QUOTENAME(CONSTRAINT_SCHEMA) + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1
) k ON (t.TABLE_SCHEMA = k.TABLE_SCHEMA and t.TABLE_NAME = k.TABLE_NAME)
WHERE t.TABLE_TYPE = 'BASE TABLE'
AND t.TABLE_SCHEMA = 'dbo' -- replace with the name of the source database you want to copy from
ORDER BY t.TABLE_SCHEMA, t.TABLE_NAME;