2009-07-13 41 views
9

Có ai có hoặc biết tập lệnh SQL sẽ tạo dữ liệu thử nghiệm cho một bảng nhất định không?Tạo dữ liệu thử nghiệm trong SQL Server

Lý tưởng nhất là nó sẽ xem sơ đồ của bảng và tạo (các) hàng có dữ liệu thử nghiệm dựa trên kiểu dữ liệu cho mỗi cột.

Nếu điều này không tồn tại, liệu có ai khác thấy nó hữu ích không? Nếu vậy tôi sẽ kéo ngón tay ra và viết một cái.

Trả lời

13

Vâng, tôi nghĩ tôi sẽ kéo ngón tay của tôi ra và viết bản thân mình một ánh sáng phát dữ liệu trọng lượng:

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 

Với bất kỳ bảng, kịch bản sẽ tạo ra một kỷ lục với một số giá trị tùy ý cho các loại ; int, varchar, nvarchar, smalldatetime và bit. Câu lệnh trường hợp có thể được thay thế bằng một hàm. Nó sẽ không đi xuống phụ thuộc nhưng nó sẽ bỏ qua bất kỳ cột hạt giống nào.

Động cơ của tôi để tạo điều này là kiểm tra các tệp ánh xạ NHibernate của tôi với một bảng có khoảng 50 cột, vì vậy tôi đã sử dụng lại một kịch bản đơn giản có thể được sử dụng lại.

5

Có một chương trình từ red gate software sẽ thực hiện việc này cho bạn. Nó được gọi là SQL Data Generator.

+0

+1 nội dung tuyệt vời! –

+0

Sản phẩm tuyệt vời nhưng tôi đang tìm thứ gì đó nhẹ hơn và miễn phí khi tôi sử dụng hết thời gian dùng thử miễn phí một thời gian trước và không thể lấy ngân sách cho nó :( –

2

Một số hương vị của Visual Studio có tích hợp dữ liệu được tạo sẵn. Nếu bạn sử dụng các dự án cơ sở dữ liệu trong đó, bạn có thể tạo kế hoạch tạo dữ liệu. Đây là MSDN bài viết

+0

Cảm ơn bạn đã tip nhưng tôi cố gắng tránh tạo cơ sở dữ liệu dự án như là nguồn db là một người khổng lồ. –

+0

Không phải lo lắng, có thể nó sẽ được sử dụng cho một người nhận được ở đây bởi google.: o) – NikolaiDante

1

Tôi đã sử dụng sau cách nó về cơ bản các bản sao dữ liệu từ bản thân, dữ liệu phát triển theo cấp số nhân với mỗi execution.Claveat là bạn phải có một số dữ liệu mẫu ban đầu và cũng có thể bạn phải thực hiện các ví dụ truy vấn tôi đã 327.680 dòng dữ liệu khi tôi bắt đầu với 10 hàng dữ liệu .by thực hiện truy vấn chỉ 16 lần.Thực hiện thêm một lần nữa và tôi sẽ hage 655360 hàng dữ liệu!

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

Bạn đã thử tạo ApexSQL: https://www.apexsql.com/sql_tools_generate.aspx?

Tôi tình cờ gặp nó trong khi tìm kiếm của riêng tôi cho điều tương tự, và nó đã làm công việc khá tốt. Nó không phải là miễn phí, nhưng bạn sẽ được dùng thử miễn phí với tất cả các tính năng có sẵn, vì vậy bạn có thể thử trước khi mua.

Tôi nghĩ rằng nó sẽ đáp ứng nhu cầu của bạn khá tốt vì nó theo dõi mối quan hệ giữa các bảng, loại cột và thậm chí ràng buộc (đối với một cơ sở dữ liệu phức tạp hơn).

Một điều tôi thích (và cần thiết, thực sự) là nó có giá trị tích hợp cho tên, địa chỉ thực, v.v. Nó giúp ích rất nhiều khi truy vấn dữ liệu thử được tạo và không nhận được chuỗi ngẫu nhiên.

Ngoài ra, bạn có thể xuất sang SQL (hoặc vài định dạng khác) và sử dụng dữ liệu được tạo bất cứ lúc nào để tái cơ sở dữ liệu.

Các vấn đề liên quan