2009-07-13 31 views
9

¿Alguien tiene o sabe de un script SQL que generará datos de prueba para una tabla determinada?Crear datos de prueba en SQL Server

Lo ideal sería que mirara el esquema de la tabla y creara fila (s) con datos de prueba basados ​​en el tipo de datos para cada columna.

Si esto no existe, ¿alguien más lo encontraría útil? Si es así, sacaré mi dedo y escribiré uno.

Respuesta

13

Bueno, yo pensé que iba a tirar de mi dedo y yo escribir un generador de datos de peso ligero:

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 

Dado cualquier mesa, el script creará un registro con unos valores arbitrarios para los tipos ; int, varchar, nvarchar, smalldatetime y bit. La declaración de caso podría ser reemplazada por una función. No viajará por las dependencias, pero se saltará las columnas no identificadas.

Mi motivación para crear esto es probar mis archivos de mapeo de NHibernate en una tabla con unas 50 columnas, así que busqué una secuencia de comandos rápida y sencilla que se pueda reutilizar.

5

Hay un programa de red gate software que hará esto por usted. Se llama SQL Data Generator.

+0

+1 ¡gran cosa de verdad! –

+0

Excelente producto, pero estoy buscando algo más ligero y gratuito, ya que utilicé mi versión de prueba gratuita hace un tiempo y no puedo obtener el presupuesto para ello :( –

2

Algunos sabores de Visual Studio tienen generación de datos integrada. Si utiliza proyectos de bases de datos, puede crear planes de generación de datos. Aquí está el MSDN artículo

+0

Gracias por la sugerencia, pero trato de evitar crear una base de datos proyecto como la fuente db es un gigante. –

+0

Sin preocupaciones, tal vez sea útil para alguien que llega aquí por google.: o) – NikolaiDante

1

Utilicé la siguiente manera básicamente copia datos de sí mismo, los datos crecen exponencialmente con cada ejecución. Claveat es que primero tiene que tener algunos datos de muestra y también tiene que ejecutar la consulta, por ejemplo, tenía 327680 filas de datos cuando comencé con 10 filas de datos. Ejecutando la consulta solo 16 veces. ¡Ejecuta una vez más y tendré 655360 filas de datos!

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

Has probado ApexSQL Generar: https://www.apexsql.com/sql_tools_generate.aspx?

Me tropecé con eso durante mi propia búsqueda de algo similar, y lo hizo bastante bien. No es gratis, pero obtienes una versión de prueba gratuita con todas las funciones disponibles, para que puedas probar antes de comprar.

Creo que satisfará sus necesidades bastante bien, ya que realiza un seguimiento de sus relaciones entre tablas, tipos de columnas e incluso restricciones (para bases de datos más complejas).

Una cosa que me gustó (y necesitaba, en realidad) era que tenía valores incorporados para nombres reales, direcciones, etc. Ayuda mucho al consultar los datos de prueba creados y no obtener cadenas al azar.

Además, puede exportar a SQL (o algunos otros formatos) y utilizar los datos creados en cualquier momento para volver a llenar la base de datos.

Cuestiones relacionadas