В SQL Server, как мне сгенерировать оператор CREATE TABLE для данной таблицы? - PullRequest
72 голосов
/ 22 августа 2008

Я потратил много времени на поиски решения этой проблемы, поэтому в духе этого сообщения я публикую его здесь, так как думаю, что он может быть полезен для других. ,

Если у кого-то есть лучший сценарий или что-то, что можно добавить, пожалуйста, опубликуйте его.

Редактировать: Да, ребята, я знаю, как это сделать в Management Studio - но мне нужно было сделать это из другого приложения.

Ответы [ 15 ]

4 голосов
/ 22 августа 2008

Благодарность @Blorgbeard за то, что он поделился своим сценарием. Я обязательно добавлю его в закладки, если оно мне понадобится.

Да, вы можете "щелкнуть правой кнопкой мыши" по таблице и написать скрипт CREATE TABLE, но:

  • Скрипт будет содержать загрузок Cruft (кого-нибудь интересуют расширенные свойства?)
  • Если в вашей схеме более 200 таблиц, вам потребуется полдня, чтобы написать сценарий вручную.

С этим сценарием, преобразованным в хранимую процедуру, и в сочетании со сценарием-оболочкой у вас будет хороший автоматизированный способ выгрузить ваш дизайн таблицы в систему контроля версий и т. Д.

Остальная часть кода вашей БД (SP, индексы FK, триггеры и т. Д.) В любом случае будет находиться под контролем исходного кода;)

3 голосов
/ 14 января 2011

Показать создание таблицы в классическом формате asp (обрабатывает ограничения, первичные ключи, копирует структуру таблицы и / или данные ...)

Sql сервер Показать создать таблицу Команды «Показать создание таблицы» и «Показать создание базы данных» в стиле Mysql с сервера Microsoft SQL. Сценарий написан на языке Microsoft asp и его довольно легко перенести на другой язык. *

2 голосов
/ 06 октября 2017

Я понимаю, что это было очень давно, но я все равно решил добавить. Если вы просто хотите таблицу, а не оператор создания таблицы, вы можете использовать

select into x from db.schema.y where 1=0

для копирования таблицы в новую БД

1 голос
/ 24 января 2017

Я включаю определения для вычисляемых столбцов

    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, name
from    sysobjects so
cross apply
    (SELECT

case when comps.definition is not null then '  ['+column_name+'] AS ' + comps.definition 
else
        '  ['+column_name+'] ' + data_type + 
        case
        when data_type like '%text' or data_type in ('image', 'sql_variant' ,'xml')
            then ''
        when data_type in ('float')
            then '(' + cast(coalesce(numeric_precision, 18) as varchar(11)) + ')'
        when data_type in ('datetime2', 'datetimeoffset', 'time')
            then '(' + cast(coalesce(datetime_precision, 7) as varchar(11)) + ')'
        when data_type in ('decimal', 'numeric')
            then '(' + cast(coalesce(numeric_precision, 18) as varchar(11)) + ',' + cast(coalesce(numeric_scale, 0) as varchar(11)) + ')'
        when (data_type like '%binary' or data_type like '%char') and character_maximum_length = -1
            then '(max)'
        when character_maximum_length is not null
            then '(' + cast(character_maximum_length as varchar(11)) + ')'
        else ''
        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 information_schema.columns.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 
end + ', ' 

     from information_schema.columns 
     left join sys.computed_columns comps 
     on OBJECT_ID(information_schema.columns.TABLE_NAME)=comps.object_id and information_schema.columns.COLUMN_NAME=comps.name

     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')
0 голосов
/ 23 сентября 2008

Если вы используете Management Studio и у вас открыто окно анализатора запросов, вы можете перетащить имя таблицы в окно анализатора запросов и ... бинго! Вы получаете скрипт стола. Я не пробовал это в SQL2008

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...