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

Откуда:
Сообщений: 116
в таблице sql server 2008 express есть один столбец, который является ключевым.
нужно добавить неопределенн. кол-во строк.
каждой строке нужно добавить значение, на данный момент которое задать невозможно, т.к.
эти значения будут вводиться постепенно.
я ввела 3 строки в конструкторе таблицы. и пыталась присвоить значения NULL в каждой строке.
null не дает присвоить т.к. столбец ключевой и не может иметь null значения.
тогда я присвоила 1строке значение default , но во 2 строке default уже не присваивается,
т.к. в одном столбце не м.б. повторных значений. также null default 'n/a' в 1 строке присваивается, а во 2 строке не присваивается.
какие значения мне нужно присвоить всем строкам ключевого столбца чтобы не возникало ошибок и
когда значения в строках еще неизвестны?
30 дек 12, 17:17    [13709137]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Не делать этот столбец PK. В качестве PK использовать суррогатный ключ, а на нужный столбец повесить уникальный фильтрованный индекс.
30 дек 12, 17:32    [13709169]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
invm, дело в том что этот столбец обязательно д.б. ключевым т к нужно сделать связи этого столбца с другими один ко многим.
есть какая ниб инструкция как сделать суррогатный ключ в виде ссылки на ресурс например.
насколько я полагаю необходимо сделать столбец уникальным с пом. оператора unique, а вот как делается суррогатный ключ
3 янв 13, 22:51    [13720767]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
PK не может содержать nullable столбцов. В unique constraint и в unique index null трактуется просто как одно из уникальных значений.
Фильтрованный уникальный индекс не может быть базой для FK. Поэтому в вашем случае можно воспользоваться вот таким трюком:
use tempdb;
go

create table dbo.MasterTable
(
 m_id int not null identity primary key,
 UniqueValue int null,
 UniqueKey as isnull(UniqueValue, -m_id) persisted,
 check (UniqueValue >= 0),
 unique (UniqueKey)
);
go

create table dbo.SlaveTable
(
 s_id int not null identity primary key,
 UniqueKey int not null references dbo.MasterTable (UniqueKey) on update cascade
);
go

declare @t table (m_id int, UniqueKey int);

insert into dbo.MasterTable
output
 inserted.m_id, inserted.UniqueKey into @t (m_id, UniqueKey)
default values;

insert into dbo.SlaveTable
 (UniqueKey)
 select
  UniqueKey
 from
  @t;
  
select * from dbo.MasterTable;
select * from dbo.SlaveTable;

update m
 set
  UniqueValue = 10
from
 @t t join
 dbo.MasterTable m on m.m_id = t.m_id;
  
select * from dbo.MasterTable;
select * from dbo.SlaveTable;
go
 
drop table dbo.SlaveTable, dbo.MasterTable;
go


Но лучше всего будет пересмотреть дизайн БД. Как минимум, к данным, поступающие извне, нельзя применять ограничение уникальности и использовать их в ссылках.
4 янв 13, 00:14    [13721072]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
aleks2
Guest
invm
к данным, поступающие извне, нельзя применять ограничение уникальности и использовать их в ссылках.

О божемой! А у вас то откуда данные поступают?
4 янв 13, 07:22    [13721548]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
прхожий
Guest
insomniahhhhh,

а если вставлять отрицательные значения в pk?
4 янв 13, 10:07    [13721712]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
invm, mastertable и slavetable и @t table - это же разные таблицы а у меня 3 столбца 1 таблицы 1 из кот ключевой
5 янв 13, 00:41    [13724855]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
qwerty112
Guest
insomniahhhhh
invm, mastertable и slavetable и @t table - это же разные таблицы а у меня 3 столбца 1 таблицы 1 из кот ключевой

и что ? не сумела "опознать" какая из них твоя ?
эта - mastertable
5 янв 13, 00:56    [13724896]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
прхожий,
у меня не могут быть отриц. значения. т.к. у рк столбца тип данных char у 2 го date у 3го char
5 янв 13, 01:30    [13724981]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
declare @t table (m_id int, UniqueKey int);

insert into dbo.MasterTable
output
inserted.m_id, inserted.UniqueKey into @t (m_id, UniqueKey)
default values;

- я честно говоря вот это действие не поняла... вплане, для чего нужна @t table? меня посетила тупость...
5 янв 13, 01:44    [13725021]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
подскажите где происходит добавление строк?
9 янв 13, 19:26    [13743475]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
insomniahhhhh,
declare @t table (m_id int, UniqueKey int);

insert into dbo.MasterTable
output
inserted.m_id, inserted.UniqueKey into @t (m_id, UniqueKey)
default values;

insomniahhhhh
подскажите где происходит добавление строк?

Тут 2 вставки:
1) в MasterTable вставляется строка со значениями по умолчанию
2) вставленные в MasterTable значения m_id и UniqueKey вставляются в табличную переменную @t
9 янв 13, 20:42    [13743691]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
hallabud
insomniahhhhh,
declare @t table (m_id int, UniqueKey int);

insert into dbo.MasterTable
output
inserted.m_id, inserted.UniqueKey into @t (m_id, UniqueKey)
default values;

insomniahhhhh
подскажите где происходит добавление строк?

Тут 2 вставки:
1) в MasterTable вставляется строка со значениями по умолчанию
2) вставленные в MasterTable значения m_id и UniqueKey вставляются в табличную переменную @t


зачем вставлять вставленные в mastertable значения m_id и UniqueKey обратно в табличную переменную @t, если
m_id int, UniqueKey int и были вставлены из @t?
9 янв 13, 22:56    [13744163]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
insomniahhhhh
зачем вставлять вставленные в mastertable значения m_id и UniqueKey обратно в табличную переменную @t, если m_id int, UniqueKey int и были вставлены из @t?
Откуда такой вывод? Попробуйте так:
select * from dbo.MasterTable;
select * from @t;

insert into dbo.MasterTable
output
 inserted.m_id, inserted.UniqueKey into @t (m_id, UniqueKey)
default values;

select * from dbo.MasterTable;
select * from @t;
9 янв 13, 23:23    [13744228]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
invm
insomniahhhhh
зачем вставлять вставленные в mastertable значения m_id и UniqueKey обратно в табличную переменную @t, если m_id int, UniqueKey int и были вставлены из @t?
Откуда такой вывод? Попробуйте так:
select * from dbo.MasterTable;
select * from @t;

insert into dbo.MasterTable
output
 inserted.m_id, inserted.UniqueKey into @t (m_id, UniqueKey)
default values;

select * from dbo.MasterTable;
select * from @t;


это тоже самое. зачем использовать @t таблицу? без нее никак? мне нужно добавить n-ное кол-во строк с неизвестными символьными значениями, строки это m_id int, UniqueKey int?
10 янв 13, 00:00    [13744295]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
insomniahhhhh,

Что вы привязались к @t? Это просто служебная таблица в данном конкретном примере, используемая для манипуляции данными в основных таблицах.

Суть же примера - показать вам как, используя PK и nullable-столбец, создать вычисляемый столбец и ограничение уникальности на нем, чтобы затем иметь возможность создавать на базе этого самого вычисляемого столбца FK.
10 янв 13, 00:30    [13744382]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
invm
insomniahhhhh,

Что вы привязались к @t? Это просто служебная таблица в данном конкретном примере, используемая для манипуляции данными в основных таблицах.

Суть же примера - показать вам как, используя PK и nullable-столбец, создать вычисляемый столбец и ограничение уникальности на нем, чтобы затем иметь возможность создавать на базе этого самого вычисляемого столбца FK.


а это значения строки:
m_id int, UniqueKey int
как сделать чтобы добавлялось n строк и их значения сохранялись?
10 янв 13, 15:06    [13747461]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
и slavetable для чего эта таблица?
10 янв 13, 15:08    [13747476]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
insomniahhhhh
каждой строке нужно добавить значение, на данный момент которое задать невозможно

Объясните понятней, что и зачем Вы хотите сделать? Выше процитированную фразу я вот ну никак не могу понять...
10 янв 13, 15:35    [13747726]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
kain111
Member

Откуда:
Сообщений: 227
присоединюсь к мнению что как то намудрено все у вас обсуждение.
Делать char ключ само по себе не разумно, поскольку скажется на производительности. Как то мне пришлось всю базу, более 10 таблиц и кучу процедур переводить на нормальный int ключ. из за того что идентификаторы клиентов генерировались и вносились из другой системы. Достаточно было перехватить все остальные потоки от той же системы и заменять там в логике их char ключи на свои суррогатные.

Воспользуйтесь уже прозвучавшим советом.
автор
Не делать этот столбец PK. В качестве PK использовать суррогатный ключ, а на нужный столбец повесить уникальный фильтрованный индекс.

автор
есть какая ниб инструкция как сделать суррогатный ключ в виде ссылки на ресурс например.
почитайте про identity. Добавьте такое поле к вашей таблице и оно само будет уникально генерироваться с каждой новой записью. и по нему уже связывайте другие таблицы.
10 янв 13, 15:59    [13747927]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
Насколько я понял (не знаю правильно или нет), у ТС есть только одна таблица из 3-х полей. первый - ПК, второе и третье через внешний ключ ссылаются на ПК этой же таблицы. Но это только версия, потому что действительно очень туманно все описано...
10 янв 13, 16:11    [13748050]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
я понимаю как сделать, мне нужно чтобы invm ообъяснил свой пример. а именно slavetable для чего и в примере одна строка добавляется с вот этими параметрами (m_id int, UniqueKey int). если одна то задача стоит добавить в столбец n-строк
10 янв 13, 16:14    [13748095]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
kain111
Member

Откуда:
Сообщений: 227
автор
дело в том что этот столбец обязательно д.б. ключевым т к нужно сделать связи этого столбца с другими один ко многим.

поясните что имелось ввиду в этой фразе ? этот ключевой столбец будет связан с другими таблицами? или другими столбцами ?
автор
а именно slavetable для чего

как я понял тов. invm понял именно что ключевое поле будет связано с другими таблицами и для примера привел вам эту slavetable которая будет ссылаться на ваш ключ
10 янв 13, 16:21    [13748177]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
insomniahhhhh
Member

Откуда:
Сообщений: 116
kain111
автор
дело в том что этот столбец обязательно д.б. ключевым т к нужно сделать связи этого столбца с другими один ко многим.

поясните что имелось ввиду в этой фразе ? этот ключевой столбец будет связан с другими таблицами? или другими столбцами ?
автор
а именно slavetable для чего

как я понял тов. invm понял именно что ключевое поле будет связано с другими таблицами и для примера привел вам эту slavetable которая будет ссылаться на ваш ключ


ключевой столбец (которому присваиваются уник.значения в этом примере) должен быть связан с ключевым столбцом другой таблицы или иными словами с другой таблицей
10 янв 13, 18:54    [13749456]     Ответить | Цитировать Сообщить модератору
 Re: значения строк ключевого столбца  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
insomniahhhhh,
Так что мешает повесить на ключевое поле свойство IDENTITY?
11 янв 13, 12:41    [13753041]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить