Внешний ключ SQL Server / Проблема с вставкой - PullRequest
1 голос
/ 25 августа 2009

Я создал две таблицы базы данных. SQL Server не позволяет мне вставлять элементы во вторую таблицу с внешним ключом. Я продолжаю получать ошибку

Сообщение 207, Уровень 16, Состояние 1, Строка 53 Неверное имя столбца 'ExemNonExemStat'.

Ниже приведен мой код. Пожалуйста, помогите, это сводит меня с ума.

----Create Job Title Table
CREATE TABLE [WILLKudlerFineFoods].dbo.tblJobTitle
(
EmpeeJobID char (10) CONSTRAINT PK_EmpeeJobID PRIMARY KEY Not Null,
EmplerInfRep char (200) Not Null,
EmpeeJobTitle char (20) Not Null,
EmpeeJobDesc char (200) Not Null,
ExemNonExemStat char (20) Not Null
)

----Create Employee Table
CREATE TABLE [WILLKudlerFineFoods].dbo.tblEmployee
(
EmpeeID char (6) CONSTRAINT PK_EmpeeJobID PRIMARY KEY Not Null,
EmpeeJobID char (10) 
      CONSTRAINT FK_EmpeeJobID FOREIGN KEY (EmpeeJobID)
          REFERENCES tblJobTitle (EmpeeJobID) Not Null,
EmpeeLName char (25) Not Null,
EmpeeFName char (20) Not Null,
EmpeeAdd char (100) Not Null,
EmpeeCity char (100) Not Null,
EmpeeState char (100) Not Null,
EmpeeTeleAreaCode char (3) Not Null,
EmpeeTeleNum char (7) Not Null,
EmplerInfRep char (200) Not Null,
EmpeeHirDate datetime Not Null,
EmpeeSal numeric (8) Not Null,
EmpeeGend char (6) Not Null,
EmpeeAge char (3) Not Null
)

--Insert record 1 into Job Title table
INSERT INTO [WILLKudlerFineFoods].dbo.tblJobTitle
(
[EmpeeJobID],
[EmplerInfRep],
[EmpeeJobTitle],
[EmpeeJobDesc],
[ExemNonExemStat]
)
VALUES
(
'0000000001','Office/Clerical','Accounting Clerk','Computes, classifies, records, and verifies numerical data for use in maintaining accounting records.','Exempt'
)

--Insert record 1 into Employee table
INSERT INTO [WILLKudlerFineFoods].dbo.tblEmployee
(
[EmpeeID],
[EmpeeJobID],
[EmpeeLName],
[EmpeeFName],
[EmpeeAdd],
[EmpeeCity],
[EmpeeState],
[EmpeeTeleAreaCode],
[EmpeeTeleNum],
[EmplerInfRep],
[EmpeeHirDate datetime],
[EmpeeSal numeric],
[EmpeeGend],
[EmpeeAge]
)
VALUES
(
'000001','0000000001','Glen','Edelman','175 Bishops Lane','La Jolla','CA','619','5550199','Sales Worker','10072003','10.75','M','64','01234567'
)

Ответы [ 2 ]

4 голосов
/ 25 августа 2009

В вашем скрипте есть несколько ошибок и несколько бровей. Вот сценарий, который я получил для работы с моим экземпляром SQL Server 2008:

/*
DROP TABLE tblEmployee
GO
DROP TABLE tblJobTitle
*/
----Create Job Title Table
CREATE TABLE tblJobTitle
(
    EmpeeJobID char (10) CONSTRAINT PK_EmpeeJobID PRIMARY KEY Not Null,
    EmplerInfRep char (200) Not Null,
    EmpeeJobTitle char (20) Not Null,
    EmpeeJobDesc char (200) Not Null,
    ExemNonExemStat char (20) Not Null
)

----Create Employee Table
CREATE TABLE tblEmployee
(
    EmpeeID char (6) CONSTRAINT PK_EmpeeID PRIMARY KEY Not Null,
    EmpeeJobID char (10) CONSTRAINT FK_EmpeeJobID FOREIGN KEY (EmpeeJobID)REFERENCES tblJobTitle (EmpeeJobID) Not Null,
    EmpeeLName char (25) Not Null,
    EmpeeFName char (20) Not Null,
    EmpeeAdd char (100) Not Null,
    EmpeeCity char (100) Not Null,
    EmpeeState char (100) Not Null,
    EmpeeTeleAreaCode char (3) Not Null,
    EmpeeTeleNum char (7) Not Null,
    EmplerInfRep char (200) Not Null,
    EmpeeHirDate datetime Not Null,
    EmpeeSal numeric (8) Not Null,
    EmpeeGend char (6) Not Null,
    EmpeeAge char (3) Not Null
)

--Insert record 1 into Job Title table
INSERT INTO tblJobTitle
(
[EmpeeJobID],
[EmplerInfRep],
[EmpeeJobTitle],
[EmpeeJobDesc],
[ExemNonExemStat]
)
VALUES
(
'0000000001','Office/Clerical','Accounting Clerk','Computes, classifies, records, and verifies numerical data for use in maintaining accounting records.','Exempt'
)

--Insert record 1 into Employee table
INSERT INTO tblEmployee
(
    [EmpeeID],
    [EmpeeJobID],
    [EmpeeLName],
    [EmpeeFName],
    [EmpeeAdd],
    [EmpeeCity],
    [EmpeeState],
    [EmpeeTeleAreaCode],
    [EmpeeTeleNum],
    [EmplerInfRep],
    [EmpeeHirDate],
    [EmpeeSal],
    [EmpeeGend],
    [EmpeeAge]
)
VALUES
(
    '000001',
    '0000000001',
    'Glen',
    'Edelman',
    '175 Bishops Lane',
    'La Jolla',
    'CA',
    '619',
    '5550199',
    'Sales Worker',
    '8/25/09',
    '10.75',
    'M',
    '64'
)

Ошибка:

  1. Вы пытались создать два ограничения PK с одинаковым именем (PK_EmpeeJobID). Измените второй на PK_EmpeeID.
  2. У вас было слишком много столбцов во вставке tblEmployee. Удалите последнее значение, и все будет в порядке.
  3. Вы пытались преобразовать 10072003 в datetime в столбце EmpeeHirDate. Я изменил это на 8/25/09.

Предложения:

  1. Вы используете char поля для ввода переменной длины. Используйте varchar, чтобы вам не приходилось rtrim(ltrim()) каждый столбец при сравнении. Таким образом, вы можете проиндексировать их. Когда вам нужно выполнить строковую операцию со столбцом, компилятор не может использовать индекс и вынужден сканировать таблицу. Как правило, это узкое место в производительности.
  2. Для ваших ПК используйте: EmpeeJobID int PRIMARY KEY NOT NULL IDENTITY(1,1), чтобы он стал столбцом identity (он же последовательный). Кроме того, int на намного быстрее присоединиться. Сделайте то же самое для EmpeeID.

Надеюсь, это направит вас в правильном направлении!

0 голосов
/ 25 августа 2009

Строка 53 является первой вставкой для tblJobTitle.

Я бы попробовал пару вещей:

  • sp_help tblJobTitle, чтобы убедиться, что столбец действительно существует в таблице.

  • Поскольку вы используете скобки вокруг ExemNonExemStat во вставке, попробуйте использовать их и при создании таблицы. Это не должно иметь никакого значения, но здесь определенно что-то странное, поэтому стоит быть абсолютно уверенным.

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

  • Не думаю, что это имеет какое-либо отношение к внешнему ключу, но попробуйте также удалить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...