SQL Server 2008: ВЫБЕРИТЕ два поля из БД, добавьте текст и столбец ОБНОВЛЕНИЕ с результатами - PullRequest
0 голосов
/ 12 июля 2011

У меня есть веб-приложение, которое синхронизируется с LDAP / eDirectory, и его данные хранятся в базе данных SQL Server 2008 Enterprise.

Наша организация только что перешла на MS / AD, и с этой миграцией появилось новое соглашение об именах учетных записей пользователей, которое, конечно, изменило адрес электронной почты каждого.

Веб-приложение использует поле EMAIL в таблице CLIENT базы данных в качестве основного / обязательного поля, поэтому, если я могу изменить существующий набор записей CLIENT.EMAIL, чтобы отразить новый формат адреса электронной почты, и синхронизировать в AD вся остальная информация об учетной записи будет обновляться без потери учетных записей и без потери этих учетных записей доступа к своей истории в веб-приложении (я проверил это, изменив одну запись EMAIL и синхронизировавшись с AD, затем учетная запись может войти с учетными данными AD и просмотреть всю историю учетной записи, которая была создана с учетной записью пользователя LDAP / eDir).

Я мог бы сделать это вручную (обновлено 1 255 записей), но я думал, что SQL-запрос будет лучшим решением.

На данный момент я написал следующее выражение SELECT (которое дало мне результат, который я хочу вставить в столбец EMAIL рабочей базы данных):

SELECT FIRST_NAME + '.' + LAST_NAME + '@email.com' FROM db_name.TABLE_NAME

Что мне нужно для этого результата, так это UPDATE поле / столбец EMAIL (который в настоящее время имеет формат LAST_NAMEFIRST_INITIAL@email.com) с результатом приведенного выше оператора SELECT.

Если я добавлю строку: UPDATE CLIENT.EMAIL над этим оператором, я получу синтаксическую ошибку в части SELECT, показанной выше.

Я хочу:

  • возьмите существующее поле EMAIL (которое показывает smithj@email.com для клиента Джона Смита),
  • затем SELECT поля имени и фамилии, разделенные '.' и добавьте @email.com в конец, чтобы я получил john.smith@email.com для той же записи (и ОБНОВЛЕНО всему полю / столбцу EMAIL соответствующей записью на основе формата FIRST_NAME.LAST_NAME@email.com.

Возможно ли это? Если так, как мне обойти синтаксические ошибки, которые я продолжаю получать? Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

1 голос
/ 12 июля 2011
UPDATE db_name.TABLE_NAME
SET EMAIL = FIRST_NAME + '.' + LAST_NAME + '@email.com'
0 голосов
/ 12 июля 2011

Сначала проверьте, показывает ли это то, что вам нужно:

SELECT FIRST_NAME
     , LAST_NAME
     , email AS currentEmail
     , FIRST_NAME + '.' + LAST_NAME
       + SUBSTRING(email, CHARINDEX('@', email), LEN(email)) 
       AS EmailToBeWritten
FROM Client ; 

Затем, если вы абсолютно уверены, что EmailToBeWritten показывает именно то, что вы хотите обновить в поле email, используйте,:

UPDATE Client 
  SET email = FIRST_NAME + '.' + LAST_NAME
              + SUBSTRING(email, CHARINDEX('@', email), LEN(email)) ;
0 голосов
/ 12 июля 2011

Присоедините таблицу каталогов к таблице клиента и выполните обновление следующим образом:

UPDATE c 
SET c.EMAIL = d.FIRST_NAME + '.' + d.LAST_NAME 
FROM CLIENT c 
INNER JOIN DIRECTORY d ON (whatever you need to do to join them goes here.  you can join using multiple criteria with substrings, for instance)
0 голосов
/ 12 июля 2011

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

UPDATE Client SET email =
    (SELECT FIRST_NAME + '.' + LAST_NAME + '@email.com' 
     FROM db_name.TABLE_NAME AS ldap WHERE ldap.ADGuid = Client.ADGuid)

Если это только одна таблица, тогда все, что вам нужно, это

UPDATE Client SET email = SELECT FIRST_NAME + '.' + LAST_NAME + '@email.com' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...