Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поле на которое наложен ключ FK может быть NULL?  [new]
sql123
Guest
Доброго дня. Связь между таблицами. Типа мастер-деталь. Но в мастере иногда может быть значение поле NULL, то бишь нету записей в подчиненной таблицы.
Поле на которое наложен ключ FK может быть NULL?
10 сен 15, 09:18    [18131020]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sql123
Поле на которое наложен ключ FK может быть NULL?

А проверить лень ? А хелп прочитать ?
10 сен 15, 09:23    [18131046]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sql123
Но в мастере иногда может быть значение поле NULL, то бишь нету записей в подчиненной таблицы.

Вы неправильно понимаете ForeignKey constraint
В мастере запись и значение в поле есть всегда.
10 сен 15, 09:24    [18131051]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
sql123
Guest
А вот нету.
То бишь в мастере NULL.
Соответственно, получаю ошибку.
Постановщик говорит может.
И шо делать?
Работу не принимают. Так как ошибка типа. Записи отбрасываются.
10 сен 15, 12:42    [18132195]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sql123
То бишь в мастере NULL.
Соответственно, получаю ошибку.

И вы свои слова можете подтвердить скриптом ?
10 сен 15, 12:44    [18132215]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
что-то вы косноязычно мысль свою пытаетесь донести, может проще покажете скрипты своих табличек
10 сен 15, 12:45    [18132229]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Glory
sql123
То бишь в мастере NULL.
Соответственно, получаю ошибку.

И вы свои слова можете подтвердить скриптом ?
Про ошибку непонятно, но NULL вполне может быть.
USE tempdb;
CREATE TABLE P(ID INT NULL CONSTRAINT pkP UNIQUE(ID));
CREATE TABLE F(ID INT NOT NULL IDENTITY, P_ID INT NULL CONSTRAINT fkFP FOREIGN KEY(P_ID) REFERENCES P(ID));
INSERT P(ID)VALUES(NULL),(1),(2);
INSERT F(P_ID)VALUES(NULL),(1),(2);
INSERT F(P_ID)VALUES(3);

DROP TABLE F,P;
Что с этими NULLами делать и зачем они тут - понять трудно.
10 сен 15, 12:53    [18132283]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
Glory
Member

Откуда:
Сообщений: 104760
iap
Про ошибку непонятно, но NULL вполне может быть.

Один NULL да еще в только UNIQUE - это не правило
10 сен 15, 12:55    [18132289]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
мне кажется, что ТС совсем про другое пытается сказать.
10 сен 15, 12:56    [18132298]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
sql123
Guest
Мастер

USE [obmen]
GO

/****** Object:  Table [dbo].[s_Docs]    Script Date: 09/10/2015 14:00:00 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[s_Docs](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[YEAR_ID] [smallint] NOT NULL,
	[TYPE_ID] [tinyint] NOT NULL,
	[DOC_ID] [int] NOT NULL,
	[PID] [smallint] NOT NULL,
	[DocDate] [smalldatetime] NOT NULL,
	[CompID] [int] NOT NULL,
	[CompAddID] [smallint] NOT NULL,
	[CarrierID] [int] NOT NULL,
	[DriverID] [int] NOT NULL,
	[ProdID] [int] NOT NULL,
	[PPID] [int] NOT NULL,
	[Qty] [numeric](21, 9) NOT NULL,
	[Price] [numeric](21, 9) NOT NULL,
	[Amount] [numeric](21, 9) NOT NULL,
	[ExtID] [int] NOT NULL,
	[ForSync] [bit] NOT NULL,
 CONSTRAINT [PK_s_Docs] PRIMARY KEY CLUSTERED 
(
	[ID] 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

ALTER TABLE [dbo].[s_Docs]  WITH CHECK ADD  CONSTRAINT [FK_s_Docs_r_Carriers] FOREIGN KEY([CarrierID])
REFERENCES [dbo].[r_Carriers] ([CarrierID])
GO

ALTER TABLE [dbo].[s_Docs] CHECK CONSTRAINT [FK_s_Docs_r_Carriers]
GO

ALTER TABLE [dbo].[s_Docs]  WITH CHECK ADD  CONSTRAINT [FK_s_Docs_r_CompsAdd] FOREIGN KEY([CompID], [CompAddID])
REFERENCES [dbo].[r_CompsAdd] ([CompID], [CompAddID])
GO

ALTER TABLE [dbo].[s_Docs] CHECK CONSTRAINT [FK_s_Docs_r_CompsAdd]
GO

ALTER TABLE [dbo].[s_Docs]  WITH CHECK ADD  CONSTRAINT [FK_s_Docs_r_Prods] FOREIGN KEY([ProdID])
REFERENCES [dbo].[r_Prods] ([ProdID])
GO

ALTER TABLE [dbo].[s_Docs] CHECK CONSTRAINT [FK_s_Docs_r_Prods]
GO

ALTER TABLE [dbo].[s_Docs] ADD  CONSTRAINT [DF_s_Docs_ExtID]  DEFAULT ((0)) FOR [ExtID]
GO

ALTER TABLE [dbo].[s_Docs] ADD  CONSTRAINT [DF__s_Docs__ForSync__5CD6CB2B]  DEFAULT ((1)) FOR [ForSync]
GO


Подчиненная
USE [obmen]
GO

/****** Object:  Table [dbo].[r_Drivers]    Script Date: 09/10/2015 14:02:03 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[r_Drivers](
	[DriverID] [int] NOT NULL,
	[DriverName] [varchar](250) NOT NULL,
	[DriverLastName] [varchar](250) NOT NULL,
	[DriverInitials] [varchar](250) NOT NULL,
	[DriverLicenseNo] [varchar](250) NOT NULL,
	[CarName] [varchar](250) NOT NULL,
	[CarNo] [varchar](50) NOT NULL,
	[TrailerName] [varchar](250) NULL,
	[TrailerNo] [varchar](50) NULL,
	[ExtID] [int] NOT NULL,
	[ForSync] [bit] NOT NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[r_Drivers] ADD  CONSTRAINT [DF_r_Drivers_ExtID]  DEFAULT ((0)) FOR [ExtID]
GO

ALTER TABLE [dbo].[r_Drivers] ADD  CONSTRAINT [DF__r_Drivers__ForSy__4BAC3F29]  DEFAULT ((1)) FOR [ForSync]
GO
10 сен 15, 14:27    [18132950]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
а где в подчинённой FK ?
10 сен 15, 14:29    [18132962]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
sql123
Guest
Дык удалил же. Это копия.
10 сен 15, 14:50    [18133119]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
sql123
Дык удалил же. Это копия.


так и к чему тогда ваш первый вопрос? как он относится к скрипту, что вы привели выше?
10 сен 15, 14:51    [18133129]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
sql123
Guest
Потому что мне надо ключ вернуть обратно.
10 сен 15, 15:10    [18133272]     Ответить | Цитировать Сообщить модератору
 Re: Поле на которое наложен ключ FK может быть NULL?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sql123
Потому что мне надо ключ вернуть обратно.

Идите почитайте литератару. Потом потренируйтесь. Если возникнут вопросы - приходите
10 сен 15, 15:13    [18133291]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить