![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
unc |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
в таблице sql server 2008 express есть один столбец, который является ключевым.
нужно добавить неопределенн. кол-во строк. каждой строке нужно добавить значение, на данный момент которое задать невозможно, т.к. эти значения будут вводиться постепенно. я ввела 3 строки в конструкторе таблицы. и пыталась присвоить значения NULL в каждой строке. null не дает присвоить т.к. столбец ключевой и не может иметь null значения. тогда я присвоила 1строке значение default , но во 2 строке default уже не присваивается, т.к. в одном столбце не м.б. повторных значений. также null default 'n/a' в 1 строке присваивается, а во 2 строке не присваивается. какие значения мне нужно присвоить всем строкам ключевого столбца чтобы не возникало ошибок и когда значения в строках еще неизвестны? |
|||
|
||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: нет Всего: 19 |
Ключевой столбец(столбцы, бывают составные ключи) должен(должны) содержать уникальные не пустые значения. Ключ в таблице это всё равно что ключ от машины, ваш не подойдёт к соседской, а также без ключа свою машину тоже не открыть ;) И тыкаясь в замок ключом в 10 одинаковых машин можно однозначно найти свою, ну или ту от которой ключ в руках ;). Если задача тупо набить пустых записей то можно написать, либо скрипт(что судя по всему вы не сможете пока), либо небольшую утильку в 10 строк, которая будет просто забивать ключевые поля значением счётчика цикла(когда ничего не остаётся и счётчик прокатывает). Ну или если записей десятка два, то просто пишите руками и всё. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." ![]() ![]() ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20580 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Можно выработать некое правило, согласно которому некий диапазон возможных значений ключевого поля означает, что запись невалидна. Например, для integer это может быть over 2*10^9...
При необходимости добавления некоего количества неинициализированных записей - выполняем добавление, начиная с этого значения. При необходимости инициализации такой записи - меняем значение поля первой (или последней) из неактивных записей на действительное. Из неудобств - во-первых, придётся всегда отсекать эти невалидные записи (это можно сделать соотв. представлением, например), во-вторых, возникнут определённые сложности с добавлением пакета пустых записей, если предыдущий пакет не выбран полностью (тут наиболее разумным будет имхо их полная зачистка и новая генерация суммарного количества - остаток плюс потребность). -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
unc |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
у меня есть вот такой пример, где ключевому столбцу присваиваются уникальные значения, не знаю правильно это... и где в примере добавляются строки... Это сообщение отредактировал(а) Akina - 9.1.2013, 17:34 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20580 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Модератор: используйте тег "Код".
Отлично. Разбирайтесь в нём. Справка по языку и трассировка в студии - в помощь. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
unc |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
я просила помощи, а не рекомендации разобраться в коде, что и так понятно
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20580 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Нет, Вы просите дать Вам готовое решение.
Хотите разобраться в коде, но не получается? указывайте точно, какая строка и по какой причине вызвала непонимание, при каком исходном состоянии какое конечное Вы ожидали, исходя из описания использованных операторов, и в чём реальный результат не совпал с ожиданиями. Тогда поможем разобраться, какая тонкость выполнения команды была упущена. А за готовыми решениями - добро пожаловать во фриланс. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
unc |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
здесь никто не предложил готовое решение. а я спросила где в примере добавляются строки в каждую таблицу.
из примера видно что есть таблицы master и slave, каждая из которых имеет столбец кот представлен не ключевым а уникальным (с пом. unique). не понятно где в каждую из этих таблиц добавляются строки и для чего 3-я таюлица @t table:
Это сообщение отредактировал(а) Akina - 9.1.2013, 19:59 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20580 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Я же говорил:
Под словом "студия" разумелось SQL Management Studio (или в предыдущих версиях - SQL Query Analyzer). Делали? После выполнения каждой команды - смотрели состояние таблиц и локальных переменных? Заодно почитайте вот это, особенно обратите внимание на OUTPUT Clause.
Это сообщение отредактировал(а) Akina - 9.1.2013, 20:05 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
unc |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
нужно создать 2 таблицы с одинаковым кол-вом столбцов и с одинаковыми названиями столбцов.
при этом в каждый столбец этих таблиц должно добавляться n-строк. при этом кол-во строк которое добавляется в 1 таблицу должно автоматически добавляться в другую. при этом нужно чтобы при изменении данных в 1 таблице менялись данные во 2. в идеале необходимо чтобы в 1 таблице только вводились и хранились данные, а изменялись данные только во 2 таблице. это точное задание. помогите найти ошибку все выглядит так: m_id Ф.И.О. наследодателя UniqueValue UniqueKey дата смерти паспортные данные 1 NULL 10 10 NULL NULL n_id Ф.И.О. наследодателя UniqueKey дата смерти паспортные данные 1 NULL NULL NULL NULL Ф.И.О. наследодателя дата смерти паспортные данные NULL NULL NULL NULL NULL NULL Ф.И.О. наследодателя дата смерти паспортные данные NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1ые 2 таблицы - с ними все нормально. а 2 другие которые ФИО наследодателя - с ними что то не так. я хотела чтобы ФИО наследодателя, дате смерти и паспортным данным из m-id и n_id таблиц присваивались неизвестные значения default values. в итоге добавились 2 другие таблицы. в 1ой 2 строки, в другой 4 строки. и нужно чтобы при вводе данных ФИО наследодателя, дате смерти и паспортным данным в m_id те же данные появлялись в n_id. и еще Uniquekey и uniquevalue в 1 таблице должны быть равны 10? (строк обработано: 1) (строк обработано: 1) (строк обработано: 1) (строк обработано: 1) (строк обработано: 1) (строк обработано: 1) Сообщение 2627, уровень 14, состояние 1, строка 5 Нарушение "UQ__Table_1__2DE46E933B2BBE9D" ограничения UNIQUE KEY. Невозможно вставить повторяющийся ключ в объект "dbo.Table_1". Выполнение данной инструкции было прервано. Сообщение 2627, уровень 14, состояние 1, строка 7 Нарушение "UQ__Table_1__2DE46E933B2BBE9D" ограничения UNIQUE KEY. Невозможно вставить повторяющийся ключ в объект "dbo.Table_1". Выполнение данной инструкции было прервано. (строк обработано: 2) (строк обработано: 1) (строк обработано: 1) (строк обработано: 1) (строк обработано: 4) USE [notarius] GO /****** Object: Table [dbo].[Table_1] Script Date: 01/12/2013 13:42:52 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Table_1]( m_id int not null identity primary key, [Ф.И.О. наследодателя] [char](50) NULL, UniqueValue int null, UniqueKey as isnull(UniqueValue, [Ф.И.О. наследодателя]) persisted, check (UniqueValue >= 0), unique (UniqueKey), [дата смерти] [date] NULL, [паспортные данные] [char](50) NULL); GO create table [dbo].[инф-ция о наследодателе_1] (n_id int not null identity primary key, [Ф.И.О. наследодателя] [char](50) NULL, UniqueKey int null references [dbo].[Table_1] (UniqueKey) on update cascade, [дата смерти] [date] NULL, [паспортные данные] [char](50) NULL); go declare @t table (m_id int, UniqueKey int); insert into [dbo].[Table_1] output inserted.m_id, inserted.UniqueKey into @t (m_id, UniqueKey) default values; insert into [dbo].[инф-ция о наследодателе_1] (UniqueKey) select UniqueKey from @t; update m_id set UniqueValue = 10 from @t t join [dbo].[Table_1] m_id on m_id.m_id = t.m_id; select * from [dbo].[Table_1]; select * from [dbo].[инф-ция о наследодателе_1]; go insert into [dbo].[Table_1] ([Ф.И.О. наследодателя]) default values; insert into [dbo].[Table_1] ([дата смерти]) default values; insert into [dbo].[Table_1] ([паспортные данные]) default values; go SELECT [Ф.И.О. наследодателя],[дата смерти],[паспортные данные] FROM [dbo].[Table_1]; go insert into [dbo].[инф-ция о наследодателе_1] ([Ф.И.О. наследодателя]) default values; insert into [dbo].[инф-ция о наследодателе_1] ([дата смерти]) default values; insert into [dbo].[инф-ция о наследодателе_1] ([паспортные данные]) default values; go SELECT [Ф.И.О. наследодателя],[дата смерти],[паспортные данные] FROM [dbo].[инф-ция о наследодателе_1]; go drop table [dbo].[инф-ция о наследодателе_1], [dbo].[Table_1]; go |
|||
|
||||
Zloxa (Online) |
|
||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 10 Всего: 161 |
Ошибки в строках 5 и 7 это лаба на триггеры?
Есть ли у МS понятие, что-то вроде отложенных ограничений целостности - ограничений которые проверяются не на этапе модификации данных, а на этапе фиксации транзакций? В оракле, знаю - есть. В PG тоже слышал, докручивали. А у MS с этим како?
Это сообщение отредактировал(а) Zloxa - 22.1.2013, 15:18 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||
|
|||||
unc |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
Сообщение 2627, уровень 14, состояние 1, строка 5
Нарушение "UQ__Table_1__2DE46E933B2BBE9D" ограничения UNIQUE KEY. Невозможно вставить повторяющийся ключ в объект "dbo.Table_1". Выполнение данной инструкции было прервано. Сообщение 2627, уровень 14, состояние 1, строка 7 Нарушение "UQ__Table_1__2DE46E933B2BBE9D" ограничения UNIQUE KEY. Невозможно вставить повторяющийся ключ в объект "dbo.Table_1". Выполнение данной инструкции было прервано. что значит как я определила есть ли ошибки? вот сообщения. в MS server нужно определять значения ключевых столбцов на этапе модификации данных,то есть до компиляции, иначе запрос не будет выполнен, если вы об этом. нет это не лаба на триггеры. есть мнение что я неправильна ввела имена всех столбцов таблицы, вот здесь: insert into [dbo].[Table_1] ([Ф.И.О. наследодателя]) default values; insert into [dbo].[Table_1] ([дата смерти]) default values; insert into [dbo].[Table_1] ([паспортные данные]) default values; go SELECT [Ф.И.О. наследодателя],[дата смерти],[паспортные данные] FROM [dbo].[Table_1]; go insert into [dbo].[инф-ция о наследодателе_1] ([Ф.И.О. наследодателя]) default values; insert into [dbo].[инф-ция о наследодателе_1] ([дата смерти]) default values; insert into [dbo].[инф-ция о наследодателе_1] ([паспортные данные]) default values; go SELECT [Ф.И.О. наследодателя],[дата смерти],[паспортные данные] FROM [dbo].[инф-ция о наследодателе_1]; go что не надо добавлять имена столбцов. убрала и получилось вот что: USE [notarius] GO /****** Object: Table [dbo].[Table_1] Script Date: 01/12/2013 13:42:52 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Table_1]( m_id int not null identity primary key, [Ф.И.О. наследодателя] [char](50) NULL, UniqueValue int null, UniqueKey as isnull(UniqueValue, [Ф.И.О. наследодателя]) persisted, check (UniqueValue >= 0), unique (UniqueKey), [дата смерти] [date] NULL, [паспортные данные] [char](50) NULL); GO create table [dbo].[инф-ция о наследодателе_1] (n_id int not null identity primary key, [Ф.И.О. наследодателя] [char](50) NULL, UniqueKey int null references [dbo].[Table_1] (UniqueKey) on update cascade, [дата смерти] [date] NULL, [паспортные данные] [char](50) NULL); go declare @t table (m_id int, UniqueKey int); insert into [dbo].[Table_1] output inserted.m_id, inserted.UniqueKey into @t (m_id, UniqueKey) default values; insert into [dbo].[инф-ция о наследодателе_1] (UniqueKey) select UniqueKey from @t; update m_id set UniqueValue = 10 from @t t join [dbo].[Table_1] m_id on m_id.m_id = t.m_id; select * from [dbo].[Table_1]; select * from [dbo].[инф-ция о наследодателе_1]; go insert into [dbo].[Table_1] default values; go insert into [dbo].[инф-ция о наследодателе_1] default values; go drop table [dbo].[инф-ция о наследодателе_1], [dbo].[Table_1]; go теперь ошибки не выдает но я не уверена что добавляться будет n-строк в каждый столбец, а будет одна строка. И происходить это должно при вводе значений в строки, потому что изначально значения неизвестны. как это проверить |
|||
|
||||
unc |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
по условию значения всех строк всех столбцах не известны, известен только тип значений. так как эти самые значения должны вводится
|
|||
|
||||
Zloxa (Online) |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 10 Всего: 161 |
Тогда причина извращености постановки задачи - не понятна. Можете пояснить откуда у задачи ноги растут? Описывайте цель, а не отдельный шаг -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
unc |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
нужно создать 2 таблицы с одинаковым кол-вом столбцов и с одинаковыми названиями столбцов.
при этом в каждый столбец этих таблиц должно добавляться n-строк. Значения строк не заданы, так как они будут появляться по мере ввода каждой строки. Известны только типы значений char date и char. при этом кол-во строк которое добавляется в 1 таблицу должно автоматически добавляться в другую, так как названия столбцов у этих 2-х таблиц одинаковые. и значения строк совпадают. названия столбцов и типы значений строк показаны в примере. Я думаю человек когда либо сталкив с sql serverом поймет. понимаете сложно объяснять если вы не создавали таблицы в sql servere Это сообщение отредактировал(а) unc - 23.1.2013, 10:47 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "MS SQL" | |
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS SQL Server | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |