Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 как создать некластерный не уникальный индекс в Create Table ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Привет.
Подскажите пожалуйста как создать некластерный не уникальный индекс в Create Table.

Т.е. вот так работает
create table [MySchema].[MyTab](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Field1] [int] constraint ux_MyTab_Field1 unique NONCLUSTERED not null,
)


а так уже нет

create table [MySchema].[MyTab](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Field1] [int] constraint ux_MyTab_Field1 NONCLUSTERED not null,
)
9 фев 16, 17:32    [18795037]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
нужно чтобы обязательно было внутри Create Table
9 фев 16, 17:32    [18795038]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
для этого CREATE INDEX существует

CREATE NONCLUSTERED INDEX IX_SalesPerson_SalesQuota_SalesYTD
    ON Sales.SalesPerson (SalesQuota, SalesYTD);


https://msdn.microsoft.com/ru-ru/library/ms188783(v=sql.105).aspx
9 фев 16, 17:38    [18795069]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Индексы создаются командой create index. Командой create table создаются таблицы и констрейнты.

Но если уж хочется логически неуникальный индекс по Field1, то:

create table [MySchema].[MyTab](
	[Id] [int] IDENTITY(1,1) NOT NULL
	, [Field1] [int] not null

        , unique ( -- Можно ли делать именованый, смотрите в синтаксисе.
	    [Field1]
	    , [Id] -- Это поле должно быть уникальным
        )
)


Сообщение было отредактировано: 9 фев 16, 17:40
9 фев 16, 17:38    [18795072]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ProBiotek,

а ничего шо вы констрейнт создаете ?
Как сказали выше для индексов существует отдельная команда
9 фев 16, 17:39    [18795078]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
но в 2014 добавили inline create index

https://msdn.microsoft.com/en-us/library/ms174979(v=sql.120).aspx

CREATE TABLE MyTable(
    a int NOT NULL
    ,b smallint NOT NULL
    ,c smallint NOT NULL
    ,d smallint NOT NULL
    ,e smallint NOT NULL

    -- This creates a primary key
    ,CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (a)

    -- This creates a unique nonclustered index on columns b and c
    ,CONSTRAINT IX_MyTable1 UNIQUE (b, c)

    -- This creates a non-clustered index on (d, e)
    ,INDEX NONCLUSTERED IX_MyTable4 ON MY_TABLE (d, e)
);
9 фев 16, 17:40    [18795083]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ProBiotek
Подскажите пожалуйста как создать некластерный не уникальный индекс в Create Table.

Для начала понять, что индекс и констрейнт - это разные вещи.
Потом найти в статье create table синтаксис создания именно индекса.
Если конечно версия вашего сервера позволяет такой синтаксис.
9 фев 16, 17:44    [18795114]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Люди, я объясню !

Дело в том, что я делаю проект деплоя БД в Visual Studio.

Соответственно у меня есть файл с созданием таблицы.
Однако они кажется не поддерживают команду GO. Поэтому я не могу создать скрипт создания таблицы, а ниже через GO создание индекса на таблицу.

Поэтому мне нужно сделать Create Table и в нем же сразу индекс.
Лучше индекс, чем простой констреинт. Ведь по сути констреинт внутри себявсе равно использует индекс ? Чтобы быстрее проверять при вставке, что запись идет уникальная.
9 фев 16, 17:45    [18795117]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Glory
ProBiotek
Подскажите пожалуйста как создать некластерный не уникальный индекс в Create Table.

Для начала понять, что индекс и констрейнт - это разные вещи.
Потом найти в статье create table синтаксис создания именно индекса.
Если конечно версия вашего сервера позволяет такой синтаксис.


а разве есть вообще разница ?
Как констреинт при вставке быстро проверит, что вставляемая запись будет уникальной ? По моему там все равно индекс внутри.
так какая разница тогда ?
9 фев 16, 17:47    [18795131]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ProBiotek
Люди, я объясню !

Вы лучше сначал хелпы читайте
Здесь не работа, здесь объяснительные не нужны

ProBiotek
Поэтому мне нужно сделать Create Table и в нем же сразу индекс.
Лучше индекс, чем простой констреинт. Ведь по сути констреинт внутри себявсе равно использует индекс ? Чтобы быстрее проверять при вставке, что запись идет уникальная.

А что же будет делать ваш "некластерный не уникальный индекс" лучше, чем кострейнт ?
9 фев 16, 17:47    [18795133]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
ProBiotek,
что за велосипед вы там придумываете? котлет от мух отделите
9 фев 16, 17:47    [18795135]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ProBiotek
а разве есть вообще разница ?
Как констреинт при вставке быстро проверит, что вставляемая запись будет уникальной ? По моему там все равно индекс внутри.
так какая разница тогда ?

Ну так если нет разницы, то зачем вы собрались создавать "некластерный не уникальный индекс" ?
9 фев 16, 17:48    [18795143]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
...я пишу в ворд ему вообще пофиг что я в нем пишу Но почему-то прогаммой оно все равно не становиться.... шо делать ?
9 фев 16, 17:48    [18795144]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Konst_One
что за велосипед вы там придумываете? котлет от мух отделите

Судя по всему, он все сам хочет делать
- проверку целостности
- генерирование сообщений об ошибке
...
9 фев 16, 17:49    [18795148]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
ну пусть дальше страдает =)
9 фев 16, 17:51    [18795159]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Ну что вы наезжаете. Подскажите лучше.

Что я делаю ? Проект деплоя в БД.

Ищу способ, как в Create Table (без отдельной команды с Go) добавить - индекс, констреинт, не важно.
9 фев 16, 17:53    [18795183]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ProBiotek
Ищу способ, как в Create Table (без отдельной команды с Go) добавить - индекс, констреинт, не важно.

Уже посоветовали - начните с хелпа. со статьи create table.
Поверьте, там совершенно открыто описаны все возможности этой команды для вашей версии.

Сообщение было отредактировано: 9 фев 16, 17:56
9 фев 16, 17:56    [18795199]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
ProBiotek
Ну что вы наезжаете. Подскажите лучше.

Что я делаю ? Проект деплоя в БД.

Ищу способ, как в Create Table (без отдельной команды с Go) добавить - индекс, констреинт, не важно.

Меняйте механизм своего деплоя, парсите код, вытаскивая из него разделители - тот же "GO" на отдельной строке, например, и разбивайте код на батчи. Иначе не здесь - так в другом месте снова наткнетесь на необходимость разбиения, но уже без возможности творчески обойти эту необходимость.
9 фев 16, 17:57    [18795212]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
den9000
Member

Откуда:
Сообщений: 2565
Если в таблице есть primary key, то по нему обычно создается кластерный индекс (если еще нет кластерных индексов). После этого любой индекс, который ты создаешь, будет некластерным, т.к. кластерный индекс у таблицы может быть один.

Ну или прямо указать, что индекс не кластерный.
9 фев 16, 17:59    [18795230]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Glory
ProBiotek
Ищу способ, как в Create Table (без отдельной команды с Go) добавить - индекс, констреинт, не важно.

Уже посоветовали - начните с хелпа. со статьи create table.
Поверьте, там совершенно открыто описаны все возможности этой команды для вашей версии.


Видел я эту статью ! 300 страниц машинописного текста !
Кто сможет разобраться в этих схемах вида
<column_constraint> ::= 
[ CONSTRAINT constraint_name ] 
{     { PRIMARY KEY | UNIQUE } 
        [ CLUSTERED | NONCLUSTERED ] 
        [ 
            WITH FILLFACTOR = fillfactor  
          | WITH ( < index_option > [ , ...n ] ) 
        ] 
        [ ON { partition_scheme_name ( partition_column_name ) 
            | filegroup | "default" } ] 
- медаль тому...
9 фев 16, 18:02    [18795246]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
o-o
Guest
Konst_One
но в 2014 добавили inline create index

https://msdn.microsoft.com/en-us/library/ms174979(v=sql.120).aspx

CREATE TABLE MyTable(
    a int NOT NULL
    ,b smallint NOT NULL
    ,c smallint NOT NULL
    ,d smallint NOT NULL
    ,e smallint NOT NULL

    -- This creates a primary key
    ,CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (a)

    -- This creates a unique nonclustered index on columns b and c
    ,CONSTRAINT IX_MyTable1 UNIQUE (b, c)

    -- This creates a non-clustered index on (d, e)
    ,INDEX NONCLUSTERED IX_MyTable4 ON MY_TABLE (d, e)
);

ну они-то добавили, да.
из-за memory optimized tables.
потому что
BOL
A nondurable memory-optimized table requires at least one index at the time of creation.
A durable memory-optimized table requires a primary key that is used internally as a recovery index.
Indexes cannot be added to an existing memory-optimized table.

только ОТКУДА вы выкопали такой синтаксис???
вот такое катит:
BOL
the following shows how to use NONCLUSTERED in a disk-based table:
CREATE TABLE t1 ( c1 int, INDEX ix_1 NONCLUSTERED (c1)) 
CREATE TABLE t2( c1 int INDEX ix_1 NONCLUSTERED (c1)) 
CREATE TABLE t3( c1 int, c2 int INDEX ix_1 NONCLUSTERED) 
CREATE TABLE t4( c1 int, c2 int, INDEX ix_1 NONCLUSTERED (c1,c2))


а ваше -- нет.
и по вашей ссылке такого примера нет.
ваш код не компилируется

К сообщению приложен файл. Размер - 97Kb
9 фев 16, 18:03    [18795252]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Konst_One
но в 2014 добавили inline create index

https://msdn.microsoft.com/en-us/library/ms174979(v=sql.120).aspx

CREATE TABLE MyTable(
    a int NOT NULL
    ,b smallint NOT NULL
    ,c smallint NOT NULL
    ,d smallint NOT NULL
    ,e smallint NOT NULL

    -- This creates a primary key
    ,CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (a)

    -- This creates a unique nonclustered index on columns b and c
    ,CONSTRAINT IX_MyTable1 UNIQUE (b, c)

    -- This creates a non-clustered index on (d, e)
    ,INDEX NONCLUSTERED IX_MyTable4 ON MY_TABLE (d, e)
);


Спасибо помогло. В целом, пожалуй это то, что мне нужно...
9 фев 16, 18:03    [18795253]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
o-o,

вот ссылка. тут еще пример. там работает
http://www.sqlpanda.com/2014/10/sql2014-t-sql-create-index-inline-with.html
9 фев 16, 18:04    [18795258]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ProBiotek
Видел я эту статью ! 300 страниц машинописного текста !

Берите выше - миллион.
И все про команду create table главное.

ProBiotek
Кто сможет разобраться в этих схемах вида

Если не можете, то переквалифицируйтесь в дворники.
9 фев 16, 18:04    [18795261]     Ответить | Цитировать Сообщить модератору
 Re: как создать некластерный не уникальный индекс в Create Table ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ProBiotek
Спасибо помогло. В целом, пожалуй это то, что мне нужно...

Значит кто-то смог оказывается разобраться ?
9 фев 16, 18:05    [18795267]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить