An Idea can change your life.....

Thursday, December 20, 2007

Generate INSERT statements using existing data

This procedure generates INSERT statements using existing data from the given tables and views. Later, you can use these INSERT statements to generate the data. It's very useful when you have to ship or package a database application. This procedure also comes in handy when you have to send sample data to your vendor or technical support provider for troubleshooting purposes.

Click here to download the procedure

Advantages:


  1. Data from both tables and views can be scripted
  2. No CURSORs are used
  3. Table names and column names with spaces are handled
  4. All datatypes are handled except images, large text and binary columns with more than 4 bytes
  5. NULLs are gracefully handled
  6. Timestamp columns are handled
  7. Identity columns are handled
  8. Very flexible and configurable
  9. Non-dbo owned tables are handled
  10. Computed columns are handled
  11. You can filter the rows for which you want to generate INSERTs

Usage:

  • To generate INSERT statements for table 'titles':
    EXEC sp_generate_inserts'titles'

  • To ommit the column list in the INSERT statement: (Column list is included by default)
    NOTE: If you have too many columns, you are advised to ommit column list, as shown below, to avoid erroneous results
    EXEC sp_generate_inserts 'titles' ,@Include_Column_List = 0

  • To generate INSERT statements for 'titlesCopy' table from 'titles' table:
    EXEC sp_generate_inserts 'titles' , 'titlesCopy'

  • To generate INSERT statements for 'titles' table for only those titles which contain the word 'Computer' in them:
    EXEC sp_generate_inserts 'titles' ,@From = "from titles where title like '%Computer%'"

  • To specify that you want to include TIMESTAMP column's data as well in the INSERT statement:
    NOTE: By default TIMESTAMP column's data is not scripted
    EXEC sp_generate_inserts 'titles' , @Include_Timestamp = 1

  • To print the debug information:
    EXEC sp_generate_inserts 'titles' ,@debug_mode = 1

  • If you are not the owner of the table, use @owner parameter to specify the owner name:
    NOTE: To use this option, you must have SELECT permissions on that table
    EXEC sp_generate_inserts nickstable , @owner = 'Nick'

  • To generate INSERT statements for the rest of the columns excluding images:
    NOTE: When using this otion, DO NOT set @include_column_list parameter to 0
    EXEC sp_generate_inserts imgtable , @ommit_images = 1


  • To generate INSERT statements for the rest of the columns excluding IDENTITY column:
    EXEC sp_generate_inserts mytable , @ommit_identity = 1

  • To generate INSERT statements for the top 10 rows in the table:
    EXEC sp_generate_inserts mytable , @top = 10

  • To generate INSERT statements only with the columns you want:
    EXEC sp_generate_inserts titles ,@cols_to_include = "'title','title_id','au_id'"

  • To generate INSERT statements by ommitting some columns:
    EXEC sp_generate_inserts titles , @cols_to_exclude = "'title','title_id','au_id'"

  • To avoid checking the foreign key constraints while loading data with INSERT statements:
    NOTE: The @disable_constraints option will disable foreign key constraints, by assuming that the source data is valid and referentially sound
    EXEC sp_generate_inserts titles , @disable_constraints = 1

  • To avoid scripting data from computed columns:
    EXEC sp_generate_inserts mytable , @ommit_computed_cols = 1

To generate INSERT statements for all the tables in your database, execute the following query in that database, which will output the commands, that you need to execute for the same:


SELECT 'EXEC sp_generate_inserts ' + '[' + name + ']' + ',@owner = ' + '[' + Rtrim(User_name(uid)) + '],' + '@ommit_images = 1, @disable_constraints = 1'
FROM sysobjects
WHERE TYPE = 'U'
AND Objectproperty
(id,'ismsshipped') = 0

No comments: