$ curl cheat.sh/
--  I've modified the version above to run for all tables and support new
--  SQL 2005 data types.  It also retains the primary key names.  Works
--  only on SQL 2005 (using cross apply).
--  
--  <pre><code>
--  select  'create table [' + so.name + '] (' + o.list + ')' + CASE WHEN
--  tc.Constraint_Name IS NULL THEN '' ELSE 'ALTER TABLE ' + so.Name + '
--  ADD CONSTRAINT ' + tc.Constraint_Name  + ' PRIMARY KEY ' + ' (' +
--  LEFT(j.List, Len(j.List)-1) + ')' END
--  from    sysobjects so
--  cross apply
        --  (SELECT
            --  '  ['+column_name+'] ' +
            --  data_type + case data_type
                        --  when 'sql_variant' then ''
                        --  when 'text' then ''
                        --  when 'ntext' then ''
         when 'xml' then ''
                        --  when 'decimal' then '(' +
--  cast(numeric_precision as varchar) + ', ' + cast(numeric_scale as
--  varchar) + ')'
                        --  else coalesce('('+case when
--  character_maximum_length = -1 then 'MAX' else
--  cast(character_maximum_length as varchar) end +')','') end + ' ' +
            --  case when exists (
                --  select id from syscolumns
                --  where object_name(id)=so.name
                --  and name=column_name
                --  and columnproperty(id,name,'IsIdentity') = 1
            --  ) then
                --  'IDENTITY(' +
                --  cast(ident_seed(so.name) as varchar) + ',' +
                --  cast(ident_incr(so.name) as varchar) + ')'
            --  else ''
            --  end + ' ' +
             --  (case when UPPER(IS_NULLABLE) = 'NO' then 'NOT ' else ''
--  end ) + 'NULL ' +
              --  case when information_schema.columns.COLUMN_DEFAULT IS
--  NOT NULL THEN 'DEFAULT '+ information_schema.columns.COLUMN_DEFAULT
--  ELSE '' END + ', '
--  
         --  from information_schema.columns where table_name = so.name
         --  order by ordinal_position
        --  FOR XML PATH('')) o (list)
--  left join
        --  information_schema.table_constraints tc
--  on      tc.Table_name           = so.Name
--  AND     tc.Constraint_Type      = 'PRIMARY KEY'
--  cross apply
        --  (select '[' + Column_Name + '], '
         --  FROM   information_schema.key_column_usage kcu
         --  WHERE  kcu.Constraint_Name     = tc.Constraint_Name
         --  ORDER BY
                --  ORDINAL_POSITION
         --  FOR XML PATH('')) j (list)
--  where   xtype = 'U'
--  AND     name    NOT IN ('dtproperties')
--  
--  </code></pre>
--  
--  **Update:** Added handling of the XML data type
--  
--  **Update 2:** Fixed cases when 1) there is multiple tables with the
--  same name but with different schemas, 2) there is multiple tables
--  having PK constraint with the same name
--  
--  [David] [so/q/21547] [cc by-sa 3.0]

$
Follow @igor_chubin cheat.sh