Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Аналог типа данных Set как в MySql  [new]
A
Guest
Есть ли в MSSQL Аналог типа данных Set как в MySql, и если есть то какие операторы для работы с ним.
10 июл 02, 17:19    [38321]     Ответить | Цитировать Сообщить модератору
 Re: Аналог типа данных Set как в MySql  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
я думаю можно сделать CHECK на указанное поле, в котором перечислить допустимые значения
10 июл 02, 17:43    [38324]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Аналог типа данных Set как в MySql  [new]
Buster
Guest
Интересует аналогичный вопрос либо SET либо ENUM. Вариант с констрейнами не подходит, ибо приходится отводить под поле строку, иной раз немаленьких рамеров. В MySQL под одно значение из ENUM-а отводится 1 бит, что очень удобно для визуализации и ненапряжно для таблицы. Подскажите плиз? чем можно подобное замутить в MSSQL?
18 май 04, 16:56    [685389]     Ответить | Цитировать Сообщить модератору
 Re: Аналог типа данных Set как в MySql  [new]
Glory
Member

Откуда:
Сообщений: 104751
Подскажите плиз? чем можно подобное замутить в MSSQL?

Привести все к 3-ей нормальной форме и создать FK constraint
18 май 04, 17:02    [685409]     Ответить | Цитировать Сообщить модератору
 Re: Аналог типа данных Set как в MySql  [new]
Buster
Guest
Glory
Привести все к 3-ей нормальной форме

Это в общем-то ясно, как иначе...

Glory
и создать FK constraint

Если не сложно опишите плиз подробнее этот момент, что-то я плохо себе представляю (точнее вообще не представляю) как может помочь FK этой проблеме?
25 май 04, 16:16    [699653]     Ответить | Цитировать Сообщить модератору
 Re: Аналог типа данных Set как в MySql  [new]
Glory
Member

Откуда:
Сообщений: 104751
use tempdb
go
if object_id('dbo.childt') is not null drop table dbo.childt
go
if object_id('dbo.parentt') is not null drop table dbo.parentt
go
create table dbo.parentt(pt_pk int identity primary key, pt_value int not null)
go
create table dbo.childt(ct_pk int identity primary key, pt_pk_value int not null, constraint pk_fk1 foreign key (pt_pk_value) REFERENCES dbo.parentt(pt_pk))
go
if object_id('dbo.childt') is not null drop table dbo.childt
go
if object_id('dbo.parentt') is not null drop table dbo.parentt
go
26 май 04, 13:42    [701951]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Аналог типа данных Set как в MySql  [new]
Aitov
Member

Откуда:
Сообщений: 13
А вот я сделал все как Glory написал, работает.
в первую таблицу набил список значений, которые может принимать поле в другой таблице....
набил данных, работает.. А теперь мне надо какое-то значение из списка изменить... ну например было 'Здание', а стало 'строение'
как быть, в mysql просто менял значение enum-поля и все...
23 июл 11, 00:31    [11015754]     Ответить | Цитировать Сообщить модератору
 Re: Аналог типа данных Set как в MySql  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Aitov, а что, UPDATE уже не работает?
23 июл 11, 00:39    [11015790]     Ответить | Цитировать Сообщить модератору
 Re: Аналог типа данных Set как в MySql  [new]
Aitov
Member

Откуда:
Сообщений: 13
не работает конечно(
Вот таблицы
В этой хранится список (поле варчар)
CREATE TABLE [dbo].[parentt](
[pt_value] [varchar](255) NOT NULL,
CONSTRAINT [PK__parentt__BC4B28803F466844] PRIMARY KEY CLUSTERED
(
[pt_value] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

А это таблица его использует...
а потом какое-то значение списка в первой таблице надо изменить(
ну это я пытаюсь сделать аналог enum в mysql

CREATE TABLE [dbo].[childt](
[ct_pk] [int] IDENTITY(1,1) NOT NULL,
[pt_pk_value] [varchar](255) NOT NULL,
PRIMARY KEY CLUSTERED
(
[ct_pk] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[childt] WITH CHECK ADD CONSTRAINT [pk_fk1] FOREIGN KEY([pt_pk_value])
REFERENCES [dbo].[parentt] ([pt_value])
GO

ALTER TABLE [dbo].[childt] CHECK CONSTRAINT [pk_fk1]
GO
23 июл 11, 13:26    [11016557]     Ответить | Цитировать Сообщить модератору
 Re: Аналог типа данных Set как в MySql  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aitov
не работает конечно(
Вот таблицы

А где в этом скрипте UPDATE то ?
23 июл 11, 13:39    [11016582]     Ответить | Цитировать Сообщить модератору
 Re: Аналог типа данных Set как в MySql  [new]
Aitov
Member

Откуда:
Сообщений: 13
ну это просто таблицы...
я так понимаю там два поля связаны по внешнему ключу...
и если я в дочернюю таблицу набил полей, со значением из первой таблицы, а потом в первой таблице захотел значение изменить, то не получается.... потому что они в дочерней таблице я так понимаю уже есть.....
я пока чуть по другому сделал, сейчас задам вопросик по структуре базы()
надо новую тему создавать или здесь можно спросить)*?
23 июл 11, 15:37    [11016855]     Ответить | Цитировать Сообщить модератору
 Re: Аналог типа данных Set как в MySql  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aitov
ну это просто таблицы...
я так понимаю там два поля связаны по внешнему ключу...
и если я в дочернюю таблицу набил полей, со значением из первой таблицы, а потом в первой таблице захотел значение изменить, то не получается.... потому что они в дочерней таблице я так понимаю уже есть.....

Изучите синтаксис создания внешнего ключа и все получится
23 июл 11, 22:17    [11017707]     Ответить | Цитировать Сообщить модератору
 Re: Аналог типа данных Set как в MySql  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
я бы сказал, что не нужно делать "прямо как там"
Ссылка на обычный справочник ключ/значение, и не менять значение ключа.
Иначе возможны геморои.
23 июл 11, 22:22    [11017727]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить