2009-07-13 89 views
9

有沒有人知道或將會知道將爲給定表生成測試數據的SQL腳本?在SQL Server中創建測試數據

理想情況下,它將查看錶的模式並使用基於每列的數據類型的測試數據創建行。

如果這不存在,其他人會覺得它有用嗎?如果是的話,我會拉出我的手指寫一個。

回答

13

嗯,我想我會拉我的手指出來,我自己寫的輕權重數據生成:

declare @select varchar(max), @insert varchar(max), @column varchar(100), 
    @type varchar(100), @identity bit, @db nvarchar(100) 

set @db = N'Orders' 
set @select = 'select ' 
set @insert = 'insert into ' + @db + ' (' 


declare crD cursor fast_forward for 
select column_name, data_type, 
COLUMNPROPERTY(
    OBJECT_ID(
     TABLE_SCHEMA + '.' + TABLE_NAME), 
    COLUMN_NAME, 'IsIdentity') AS COLUMN_ID 
from Northwind.INFORMATION_SCHEMA.COLUMNS 
where table_name = @db 


open crD 
fetch crD into @column, @type, @identity 

while @@fetch_status = 0 
begin 
if @identity = 0 or @identity is null 
begin 
    set @insert = @insert + @column + ', ' 
    set @select = @select + 
     case @type 
      when 'int' then '1' 
      when 'varchar' then '''test''' 
      when 'nvarchar' then '''test''' 
      when 'smalldatetime' then 'getdate()' 
      when 'bit' then '0' 
      else 'NULL' 
     end + ', ' 
end 
fetch crD into @column, @type, @identity 
end 

set @select = left(@select, len(@select) - 1) 
set @insert = left(@insert, len(@insert) - 1) + ')' 
exec(@insert + @select) 

close crD 
deallocate crD 

給定任何表,該腳本將創建一個記錄與該類型的一些任意值; int,varchar,nvarchar,smalldatetime和bit。案例陳述可以用一個函數取代。它不會傳遞依賴關係,但會跳過任何種子列。

我的動機是爲了測試我的NHibernate映射文件與大約50列的表,所以我之後是一個簡單的腳本,可以重新使用。

5

有一個程序red gate software這將爲你做這個。它被稱爲SQL Data Generator

+0

確實是很棒的東西! – 2009-07-13 11:44:15

+0

偉大的產品,但我正在尋找更輕量級和免費的東西,因爲我用了我的免費試用前一段時間,不能得到它的預算:( – 2009-07-13 11:49:49

2

某些風格的Visual Studio內置了數據生成功能。 如果您在其中使用數據庫項目,則可以創建數據生成計劃。這裏的MSDN文章

1

我用下面的方式基本上從本身複製數據,數據隨着每次執行都呈指數級增長.Claveat是你必須首先獲得一些樣本數據,並且還必須執行查詢,例如我有327680行數據當我開始10行數據時,通過執行查詢只需16次。再執行一次,我將擁有655360行數據!

insert into mytable select [col1], [col2], [col3] from mytable 
7

您是否試過ApexSQL生成:https://www.apexsql.com/sql_tools_generate.aspx

在我自己尋找類似的東西時,我偶然發現了它,它做得很好。這不是免費的,但是您可以免費試用所有可用的功能,所以您可以在購買之前嘗試。

我認爲它會很好地滿足您的需求,因爲它可以跟蹤表,列類型甚至是約束(對於更復雜的數據庫)之間的關係。

我喜歡(而且實際上需要)的一件事就是它具有實際名稱,地址等的內置值。查詢創建的測試數據並且不會獲得隨機字符串時,它非常有幫助。此外,您可以導出到SQL(或其他幾種格式),並隨時使用創建的數據重新填充數據庫。