2017-03-22 77 views
1

我想要生成一個腳本,它會給我一個「插入」查詢,其中包含來自現有數據庫的數據,但只有來自每個表的ID排序的前1000行。 我試圖通過使用位於Management Studio(MyDatabaseName - > Tasks - > Generate scripts ...)中的「生成腳本...」爲單個表生成查詢,然後我在C#中編寫了一個簡單的函數,該數據爲1000個第一排,但是當你有數百個表SQL高級腳本選項

List<string> script = File.ReadLines(@"script.sql").Take(1000).ToList(); 
File.WriteAllLines(@"top1000.sql", script); 
+2

這似乎是一個好主意。現在,怎麼了?你嘗試了什麼,但沒有奏效?您應該[編輯]讓我們知道1)您嘗試了什麼2)結果是什麼3)爲什麼您的結果不被您接受 – Will

+1

您是否需要考慮外鍵? –

+0

你可以看看[這裏](http://stackoverflow.com/questions/8668511/how-can-i-select-top-500-rows-from-table1-and-insert-them-to-table2) 。這會幫助你。 –

回答

1

下面的腳本將生成源數據庫中所有表都複製到另一個空數據庫1000條隨機記錄聲明這不是一個好主意。

請注意,「select * insert into ...」語句只有在目標表尚不存在時纔有效。

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;