Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Такое поведение весьма печально, поскольку для некоторых сценариев, бывает полезно получить скриптовое описание таблицы.
что версию сервера не указываете ;-)
Приведите, пожалуйста, пример такого сценария.
Если вспомнить теорию, то PRIMARY KEY — это кластерный индекс и ограничение Unique.Хотелось бы напомнить, что могут существовать и «аномальные» таблицы:
На уровне метаданных, SQL Server для всех кластерных индексов задает index_id равный 1, поэтому можно сделать выборку из sys.indexes фильтруя по index_id = 1 либо is_primary_key = 1.
Хотелось бы напомнить, что могут существовать и «аномальные» таблицы:
Также ограничения CHECK и DEFAULT тоже могут иметь свои имена
что-то я не увидел в статье обработки произвольных индексов и этих самых CHECK CONSTRAINTs
Все это подпадает под условие is_primary_key = 1Не попадает. Запрос, который вы в итоге сгенерируете, создаст другую таблицу, отличную от исходной по структуре.
О чем вы вообще? Я о CK и DF, вы вдруг о PK…Также ограничения CHECK и DEFAULT тоже могут иметь свои именаПри редактирование имени PK констрейнта, SQL Server автоматически переименовывает и кластерный индекс тоже.
create table test (
id1 int not null identity (100, 12),
id2 int not null constraint pk_test primary key nonclustered,
id3 int not null constraint df_test_id3 default 42 constraint ck_test_id3 check ( id3 <> 7),
id4 int not null constraint ix_test unique clustered,
);
CREATE TABLE dbo.test (
[id1] [INT] NOT NULL IDENTITY(100,12)
, [id2] [INT] NOT NULL
, [id3] [INT] NOT NULL DEFAULT ((42))
, [id4] [INT] NOT NULL
, CONSTRAINT [pk_test] PRIMARY KEY ([id2]) );
О чем вы вообще? Я о CK и DF, вы вдруг о PK…
CREATE TABLE [dbo].[test]
(
[id1] [INT] NOT NULL IDENTITY(100,12)
, [id2] [INT] NOT NULL
, [id3] [INT] NOT NULL CONSTRAINT [df_test_id3] DEFAULT ((42)) CONSTRAINT [ck_test_id3] CHECK ([id3]<>(7))
, [id4] [INT] NOT NULL
, CONSTRAINT [pk_test] PRIMARY KEY NONCLUSTERED ([id2])
);
How to generate a CREATE TABLE script for an existing table