Установка нулевых значений в дублирующую строку, а затем сохранение только 1 строки - PullRequest
0 голосов
/ 03 ноября 2019

Мне нужна ваша помощь.

Моя база данных будет настроена так, чтобы указывать, что некоторые наши сотрудники работают в одном офисе.

Но что происходит, например, когда я иду, чтобы удалитьсотрудники из этого офиса, я просто устанавливаю значения столбцов LastName и FirstName на «ноль». Проблема здесь в том, что я хочу сохранить только одно значение строки для одних и тех же данных, а не 2 строки, которые в основном содержат одни и те же данные.

Может быть, есть лучший способ сделать это, так как яОтносительно новичок в этом, поэтому я открыт для предложений экспертов здесь на этом сайте.

Заранее спасибо,

Вот вопрос SQLFiddle: http://sqlfiddle.com/#!18/c31e3/1

CREATE TABLE tbl_accdb (
    Floor varchar(255),
    Office varchar(255),
    LastName varchar(255),
    FirstName varchar(255) 
);

INSERT INTO tbl_accdb (Floor, Office, LastName, FirstName)
VALUES ('2', 'B-47', 'Smith', 'John');

INSERT INTO tbl_accdb (Floor, Office, LastName, FirstName)
VALUES ('2', 'B-47', 'Doe', 'Jane');

UPDATE tbl_accdb
SET
  LastName = null,
  FirstName = null
WHERE Floor = 2 AND Office = 'B-47';

1 Ответ

2 голосов
/ 03 ноября 2019

Первое, что вы хотите сделать, это обновить вашу базу данных. SQL Server 2008 не имеет расширенной поддержки с начала этого года, что означает, что вы даже не будете получать обновления безопасности от Microsoft на вашем сервере. Настало время для обновления.

Сказав это, теперь давайте разберемся с самой структурой таблицы.

Первое, что я хотел бы сделать здесь, это разделить ваши данные на две таблицы - одну для хранения. служебная информация, а другая должна содержать данные о сотрудниках.

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

CREATE TABLE tblOffice (
    Id int identity(1,1) CONSTRAINT PK_Office PRIMARY KEY,
    Floor int, -- Since this is a number, store it as a number.
    Office varchar(255), -- Do you really need all that length?
    -- Other office related data such as capacity etc'
    CONSTRAINT UX_Office UNIQUE (Floor, Office) 
);

CREATE TABLE tblEmployee (
    EmployeeNumber int CONSTRAINT PK_Employee PRIMARY KEY,
    LastName varchar(255),
    FirstName varchar(255),
    -- Other employee related data such as social security number etc'
    OfficeId int CONSTRAINT FK_Employee_Office REFERENCES TblOffice(Id)
);
...