С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
3 / 3 / 8
Регистрация: 14.10.2012
Сообщений: 288

Создание базы данных и ошибка с привязкой составного идентификатора

20.09.2016, 00:58. Показов 1211. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно было создать БД, данные генерировал с помощью программы на Си
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <memory.h>
 
 
double RandDbl( void )
{
    return rand() / ((double)RAND_MAX + 1.0);
}
 
int RandInt( int n )
{
    return (int)(n * RandDbl());
}
 
 
int GenerateEmpl( FILE *fp, size_t MaxRecs )
{
    char *Name[] =
    {
        "Chris",    "Rom",
        "Harry",    "Marry",
        "David",    "Luk",
        "Gilbert",  "Jane",
        "Markus",   "Gloria",
        "Mike", "Selena",
        "Justin",   "Manuel",
        "Cristiano", "Tim",
        "Ban",  "Peter",
        "Tony", "Vanessa",
        "Ivan", "Alex",
        "Vasya",    "Michail"
    };
 
    char *Last_name[] =
    {
        "Davis",    "Miller",
        "Wilson",   "Moore",
        "Taylor",   "Anderson",
        "Thomas",   "Jackson",
        "White",    "Harris",
        "Martin",   "Thompson",
        "King",     "Lopez",
        "Hill",     "Scott",
        "Green",    "Gonzalez",
        "Nelson",   "Rivera",
        "Carter",   "Howard",
        "Perez",    "Torres"
    };
 
    char *Phone_number[] = 
    { "+7(915)564-43-21", "+7(913)134-43-81",
        "+7(918)653-53-32", "+7(918)244-32-76",
        "+7(903)745-63-43", "+7(915)354-21-69",
        "+7(916)836-73-54", "+7(916)464-10-56",
        "+7(915)927-83-65", "+7(916)574-00-42",
        "+7(910)118-93-76", "+7(988)684-94-33",
        "+7(916)209-03-87", "+7(988)794-85-27",
        "+7(910)370-13-98", "+7(985)804-76-18",
        "+7(917)481-23-09", "+7(985)954-77-03",
        "+7(903)592-33-00", "+7(973)014-68-71",
        "+7(988)803-43-11", "+7(919)024-59-94",
        "+7(988)114-53-22", "+7(929)174-42-83",
    };
 
    char *Email[] = 
    {"vakhanov@bk.ru", "little_girl@gmail.com",
        "perez@mail.ru", "vanessa@gmail.com",
        "tim@lib.com", "henrik@gmail.com",
        "irina@mail.ru", "masha@bk.ru",
        "harryT@gmail.com", "perrusU@mail.ru",
        "ElonM@bk.ru", "PPrush@yandex.ru",
        "BorN@yandex.ru","Kuropatka@gmail.ru",
        "DertJ@rambler.ru","obivan@mail.ru",
        "senaIam@mail.ru", "Felisa@gmail.com",
        "whoiam@mail.ru", "cris_r@gmail.com",
        "peter_rec@yandex.ru", "mina_car@mail.ru",
        "bikeshop@gmail.ru", "pavlo_khurma@microsoft.ua"
    };
 
    size_t NumNames = sizeof Name / sizeof Name[0];
    size_t NumBuses = sizeof Last_name / sizeof Last_name[0];
    size_t NumPhone = sizeof Phone_number / sizeof Phone_number[0];
    size_t NumMail = sizeof Email / sizeof Email[0];
    size_t ThisRec;
 
    for( ThisRec = 0; ThisRec < MaxRecs; ThisRec++ )
    {
        fprintf( fp, "%d\t", ThisRec + 1);
 
        fprintf( fp, "%s\t",
            Name[RandInt(NumNames)] );
 
        fprintf( fp, "%s\t",
            Last_name[RandInt(NumBuses)] );
 
        fprintf( fp, "%s\t",
            Phone_number[RandInt(NumPhone)] );
 
        fprintf( fp, "%s\t",
            Email[RandInt(NumMail)] );
 
        fprintf( fp, "%d\t", rand() % 110 + 2);
 
        fprintf( fp, "%d\n", rand() % 17000 + 3500);
 
    }
    return 0;
}
 
int GenerateJobs( FILE *fp, size_t MaxRecs )
{
    char *Proj_title[] = 
    {
        "A nation divided", "A world of music", "Across Oceans to Australia",
        "Healthy food", "Mass Media", "Trip into the Future", "Which Word to Use.",
        "Tourism is cool!", "Travelling around the world.", "Trip into the Future",
        "Discovering Ethiopia", "Anglican cathedrals", "Environmental Problems"
    };
 
    size_t NumTit = sizeof Proj_title / sizeof Proj_title[0];
    size_t ThisRec;
    time_t date_time_t;
    struct tm date = {0};
    struct tm *pd;
 
    date_time_t = time( NULL );
    pd = localtime( &date_time_t );
    if ( pd != NULL )
    {
        memcpy( &date, pd, sizeof date );
    }
    else
    {
        date.tm_mday = 1;
        date.tm_mon = 0;
        date.tm_year = 100;
    }
    
 
    for( ThisRec = 0; ThisRec < MaxRecs; ThisRec++ )
    {
        fprintf( fp, "%d\t",  rand() % 115 + 100);
 
        fprintf( fp, "%s\t",
            Proj_title[RandInt(NumTit)] );
 
        fprintf( fp, "%02d-%02d-%d\t",
            date.tm_mday + rand() % 8 + 1,
            (date.tm_mon + rand() % 3 + 1) % 12,
            date.tm_year + 1900 + rand() % 2 + 1);
 
        fprintf( fp, "%02d-%02d-%d\n",
            date.tm_mday + rand() % 8 + 1,
            (date.tm_mon + rand() % 3 + 1) % 12,
            date.tm_year + 1900 + rand() % 3 + 2);
    }
    return 0;
}
 
int GenerateDep( FILE *fp, size_t MaxRecs )
{
    char *Dep_name[] = 
    {
        "Administration", "Marketing", "Purchasing",
        "Shipping", "IT", "Sales",
        "Executive", "Finance", "Treasury", 
        "Corporate Tax", "Control And Credit", "Control And Credit",
        "Benefits", "Manufacturing", "Construction"
    };
 
    size_t NumDN= sizeof Dep_name / sizeof Dep_name[0];
    size_t ThisRec;
 
    for( ThisRec = 0; ThisRec < MaxRecs; ThisRec++ )
    {
        fprintf( fp, "%d\t",  rand() % 210 + 200);
 
        fprintf( fp, "%d\t", rand() % 692 + 7);
 
        fprintf( fp, "%s\n",
            Dep_name[RandInt(NumDN)] );
    }
    return 0;
}
 
int GenerateWork( FILE *fp, size_t MaxRecs )
{
    size_t ThisRec;
 
    for( ThisRec = 0; ThisRec < MaxRecs; ThisRec++ )
    {
        fprintf( fp, "%d\t",  rand() % 1000 + 1);
 
        fprintf( fp, "%d\t", rand() % 115 + 100);
 
        fprintf( fp, "%d\t", rand() % 210 + 200);
 
        fprintf( fp, "%d\n", rand() % 10000 + 5000);
    }
    return 0;
}
 
int main(int argc, char* argv){
    FILE *fEmpl = fopen("employees.txt", "w");
    FILE *fProj = fopen("projects.txt", "w");
    FILE *fDep = fopen("departments.txt", "w");
    FILE *fWork = fopen("works.txt", "w");
    GenerateEmpl(fEmpl, 1000);
    GenerateJobs(fProj, 1000);
    GenerateDep(fDep, 1000);
    GenerateWork(fWork, 1000);
    return 0;
}
Затем уже начал вбивать эти данные т.е. создавать таблицы, ключи и загружать данные
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/****** Начинаем работать в контексте системной базы данных [master] ******/
USE [master]
GO
 
/****** Если база данных [dbSPJ] уже существует, уничтожаем ее ******/
IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'dbSPJ')
    DROP DATABASE [dbSPJ]
GO
 
/****** Создаем базу данных [dbSPJ] ******/
CREATE DATABASE [dbSPJ]
GO
 
/****** Переходим в контекст созданной базы данных [dbSPJ] ******/
USE [dbSPJ]
GO
 
/****** Создаем таблицу работников [S] ******/
CREATE TABLE [dbo].[employee](
    [employee_id] [INT] IDENTITY(1,1) NOT NULL,
    [first_name] [VARCHAR](20) NOT NULL,
    [last_name] [VARCHAR](20) NOT NULL,
    [phone] [VARCHAR](17) NOT NULL,
    [e-mail] [VARCHAR](30) NOT NULL,
    [manager_id] [INT] NOT NULL,
    [salary][INT] NOT NULL
)
GO
 
CREATE TABLE [dbo].[departments](
    [department_id] [INT] IDENTITY(1,1) NOT NULL,
    [quantity] [INT] NOT NULL,
    [department_name] [VARCHAR](20) NOT NULL
)
GO
 
CREATE TABLE [dbo].[projects](
    [project_id] [INT] IDENTITY(1,1) NOT NULL,
    [project_title] [VARCHAR](30) NOT NULL,
    [start_date] [DATE] NOT NULL,
    [end_date][DATE] NOT NULL
)
GO
 
CREATE TABLE [dbo].[works](
    [employee_id][INT] NOT NULL,
    [project_id] [INT] NOT NULL,
    [department_id][INT] NOT NULL,
    [bonus] [INT] NOT NULL,
)
GO
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/****** Начинаем работать в контексте созданной базы данных [dbSPJ] ******/
USE [dbSPJ]
GO
 
ALTER TABLE [dbo].[employee] ADD 
CONSTRAINT [PK_Em] PRIMARY KEY ([employee_id])
GO
 
ALTER TABLE [dbo].[departments] ADD 
CONSTRAINT [PK_Dep] PRIMARY KEY ([department_id])
GO
 
ALTER TABLE [dbo].[projects] ADD 
CONSTRAINT [PK_Pr] PRIMARY KEY ([project_id])
GO
 
ALTER TABLE [dbo].[works] ADD 
CONSTRAINT [PK_SP] PRIMARY KEY ([employee_id],  [project_id], [department_id] ),
CONSTRAINT [FK_SP_Dep] FOREIGN KEY([department_id]) REFERENCES [dbo].[departments] ([department_id]) ,
CONSTRAINT [FK_SP_Pr] FOREIGN KEY([project_id]) REFERENCES [dbo].[projects] ([project_id]) ,
CONSTRAINT [FK_SP_Emp] FOREIGN KEY([employee_id]) REFERENCES [dbo].[employee] ([employee_id])
GO
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
BULK INSERT [dbSPJ].[dbo].[employee]
FROM 'D:\BD1\employees.txt'
WITH (CODEPAGE = 'ACP', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n');
GO
 
BULK INSERT [dbSPJ].[dbo].[departments]
FROM 'D:\BD1\departments.txt'
WITH (CODEPAGE = 'ACP', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n');
GO
 
BULK INSERT [dbSPJ].[dbo].[projects]
FROM 'D:\BD1\projects.txt'
WITH (CODEPAGE = 'ACP', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n');
GO
 
BULK INSERT [dbSPJ].[dbo].[works]
FROM 'D:\BD1\works.txt'
WITH (CODEPAGE = 'ACP', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n');
GO
все создалось и заполнилось данными, тут я решил написать запрос, по которому будут выводиться имена сотрудников, id и бонусы, которые им зачислили
SQL
1
2
3
4
5
/****** Скрипт для команды SelectTopNRows из среды SSMS  ******/
SELECT e.first_name "IO", e.employee_id "emp_id", works.bonus
FROM [dbSPJ].[dbo].[works], [dbSPJ].[dbo].[employee] e
WHERE e.employee_id = works.employee_id
ORDER BY e.employee_id
Запрос вроде написал правильно, а данные выводятся не те, и при наведении курсора на e.first_name и все, что связано с таблицей employee выводится информация "не удалось выполнить привязку составного идентификатора", я предполагаю, что ошибка в ключах, но найти её не могу
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.09.2016, 00:58
Ответы с готовыми решениями:

Создание базы данных (ошибка)
Приветствую всех, кого так или иначе судьба связала программированием! Ребята, выручайте! Перерыл уже весь интернет на всех языках...

Ошибка при создание базы данных Symfony2
Не получается создать базу данных. ariom@comp:~/ytProjects/my_project_name$ bin/console doctrine:database:create Вот что...

Создание базы данных, открытие из под одной базы данных MS Access
Здравствуйте. В общем, C# начал заниматься только вот и сразу была поставлена задача создать базу данных. Идея есть, при открытие программы...

1
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
20.09.2016, 11:02
А так?
T-SQL
1
2
3
4
SELECT IO=e.first_name, emp_id=e.employee_id, w.bonus
FROM [dbSPJ].[dbo].[works] w
JOIN [dbSPJ].[dbo].[employee] e ON w.employee_id=e.employee_id
ORDER BY e.employee_id;
Двойные кавычки обычно обрамляют имя таблицы (если SET QUOTED_IDENTIFIER ON).
У вас же нет таблицы IO!
Для имён таблиц, полей и т.п., содержащих недопустимые в именах символы, лучше использовать квадратные скобки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.09.2016, 11:02
Помогаю со студенческими работами здесь

При открытии базы данных FoxPro в приложение Delphi возникает ошибка драйвера внешней базы данных (8961)
При открытии базы данных FoxPro в приложение Delphi возникает ошибка драйвера внешней базы данных (8961) Код программы такой unit...

Создание диаграммы и ошибка "У базы данных отсутствует допустимый владелец"
вот такое пишет ЗАГОЛОВОК: Microsoft SQL Server Management Studio ------------------------------ Объекты поддержки диаграмм...

Создание составного компонента
Здравствуйте. Подскажите пожалуйста. Пытаюсь создать новый компонент на основе кнопки. При нажатии на кнопку на форме должен появляться...

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

Создание базы данных на лету, создание и заполнение таблиц в базе DB (Paradox? или..).
Здравствуйте Профи! --- Видел я &quot;простенькую&quot; (exe-шник небольшого размера, запускается сразу, без предварительной установки)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru