Конечно, вы можете относительно легко написать таблицу с помощью пользовательского интерфейса:
Это выведет CREATE TABLE
сценарий, и вам нужно будет только найти и заменить старое имя новым (и убедиться, что объект с новым именем еще не существует).
Но если вы пытаетесь автоматизировать это (например, сгенерировать скрипт создания таблицы в коде), это немного более громоздко. Приведенный выше сценарий не просто извлекает весь CREATE TABLE
DDL из одного места в метаданных; он создает целую кучу магии за кулисами в коде для генерации возможного CREATE TABLE
сценария (вы можете использовать Profiler, чтобы увидеть, где он получает свои данные, но вы не можете видеть, как он его собирает). Я предложил вариант для этого:
http://connect.microsoft.com/SQLServer/feedback/details/273934
Однако это было встречено с очень небольшим количеством голосов и было быстро сбито Microsoft. Возможно, вам будет гораздо полезнее использовать сторонний инструмент для создания схемы ( я писал об этом в блоге). ).
В SQL Server 2012 появились новые функции метаданных, которые позволяют вам стать намного ближе, чем работа, которую вы должны были выполнить в 2005, 2008 и 2008 R2, объединяя информацию столбца из метаданных (которая имеет много предостережений, например, если это десятичную, вы должны добавить точность / масштаб, если [n [var [char]] вы должны добавить спецификацию длины, если n [var] char, вы должны сократить max_length пополам, если это MAX, вы должны измените -1 на МАКС, и т. д. и т. д.). В SQL Server 2012 эта часть немного проще:
SELECT name, system_type_name, is_nullable FROM
sys.dm_exec_describe_first_result_set('select * from sys.objects', NULL, 0)
Полученные результаты:
name system_type_name is_nullable
-------------------- ---------------- -----------
name nvarchar(128) 0
object_id int 0
principal_id int 1
schema_id int 0
parent_object_id int 0
type char(2) 0
type_desc nvarchar(60) 1
create_date datetime 0
modify_date datetime 0
is_ms_shipped bit 0
is_published bit 0
is_schema_published bit 0
Я тоже писал об этом в блоге.
Возможно, это гораздо ближе к вашему целевому CREATE TABLE
утверждению, чем замысловатый подход с использованиемsys.columns
, но впереди еще много работы. Ключи, ограничения, параметры текста в строке, информация о файловой группе, параметры сжатия, индексы и т. Д. Это очень длинный список, и я еще раз предлагаю вам взглянуть на сторонний инструмент для этого, а не на риск повторения более Используется аналогия, заново изобретая колесо.
Тем не менее, если вам нужно сделать это с помощью кода, но вы можете сделать это вне SQL Server, вы можете рассмотреть SMO / PowerShell. Смотрите этот совет и метод Scripter.Script () .
я написал этот sp, чтобы автоматически создать схему со всеми вещами, pk, fk, разделами, ограничениями ...
ВАЖНЫЙ!! до исполнения
вот ИП:
выполнить это:
источник
Это может быть использование отбойного молотка, чтобы вбить гвоздь в стену, но, учитывая широту вопроса, я думаю, что это правильный вариант, чтобы упомянуть.
Если вы используете SQL Server 2012 SP4 +, 2014 SP2 + или 2016 SP1 +, вы можете использовать
DBCC CLONEDATABASE
для создания копии базы данных без данных только для схемы. Это идеально для генерации полных копий схемы из нескольких таблиц и может облегчить необходимость «автоматизировать» процесс циклического перемещения по серии таблиц, но имейте в виду, что все копии таблиц будут созданы внутри новой базы данных только для чтения. ,Эти таблицы будут включать внешние ключи, первичные ключи, индексы и ограничения. Они также будут включать статистику и данные хранилища запросов (если вы не укажете
NO_STATISTICS
иNO_QUERYSTORE
).Синтаксис
Есть также несколько других предостережений, о которых Брент Озар написал отличный пост , но все это на самом деле сводится к тому, как и почему вы хотите создавать копии таблиц относительно того, являются ли какие-либо тонкости препятствиями для сделок. ,
источник
Вы можете использовать команду «Создать сценарий» в SQL Server Management Studio, чтобы получить сценарий, который может создать вашу таблицу, включая индексы, триггеры, внешние ключи и т. Д.
В SSMS
Затем вы можете редактировать, чтобы включить именно то, что вам нужно в вашей целевой базе данных.
источник
Вот версия, основанная на версии Е.Мантованелли в этой теме. Это исправляет проблему, когда уникальный индекс не включал ключевое слово UNIQUE в результирующий скрипт. Он также добавляет параметры, чтобы можно было создать таблицу без некластеризованных индексов или вы можете создавать сценарии только для некластеризованных индексов. Я использую это, чтобы создать таблицу этапов, загрузить ее, добавить некластеризованные индексы, а затем выполнить переключение таблиц, что позволяет нагрузке выполняться быстрее, а индексы не фрагментируются.
источник
Вы можете использовать этот скрипт для копирования структуры таблицы с внешними ключами, но без индексов. Этот скрипт корректно обрабатывает пользовательские типы и вычисляемые столбцы.
Если вы заинтересованы, вы можете найти его также в моем блоге: http://www.hansmichiels.com/2016/02/18/how-to-copy-a-database-table-structure-t-sql-scripting-series -s01e01 /
источник
источник