Обновить запрос? Или другое решение? - PullRequest
1 голос
/ 15 апреля 2010

У меня есть столбец электронной почты с недопустимыми адресами, например, «Ххх @ hotmail.co.uk, ххх @ hotmail.co.uk». (Включает в себя цитаты)

Мой оператор select очищает их:

SELECT SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2))
FROM table
WHERE [Email] LIKE ‘”%”’

Это работает и отображает: xxx@hotmail.co.uk

Проблема у меня в том, что у меня есть множество записей с неверным форматом, и мне нужно обновить их с результатом запроса SELECT выше Есть идеи?

Ответы [ 5 ]

2 голосов
/ 15 апреля 2010

, чтобы убедиться, что вы не потеряете действительные электронные письма, просто сохраните измененные:

CREATE TABLE ChangedEmails
(
PK ...
Email ...
)

затем исправьте электронные письма и сохраните измененные (в одном утверждении)

UPDATE YourTable
    SET Email=SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2)) 
    OUTPUT INSERTED.PK,DELETED.Email
        INTO ChangedEmails
WHERE 
    Email LIKE ‘”%”’

Теперь, если есть какие-либо сомнения, вы можете увидеть, что было в предыдущем письме, прежде чем вы их изменили.

ТАКЖЕ, на основании комментария ОП:

Это то, что я придумал, но я получаю ключ нарушения ПК, так что я думаю, что мне нужно чтобы найти, какие строки вызывают это. Спасибо!

НЕ делайте PK адресом электронной почты !! используйте идентификатор в качестве PK и сделайте электронное письмо только столбцом данных. Используйте это, чтобы «исправить» вашу таблицу:

ALTER TABLE YourTable ADD YourPKID int NOT NULL IDENTITY (1, 1)
GO

ALTER TABLE YourTable DROP CONSTRAINT PK_YourTable
GO

ALTER TABLE dbo.JobApps ADD CONSTRAINT
    PK_YourTable PRIMARY KEY CLUSTERED 
    (
    YourPKID 
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
2 голосов
/ 15 апреля 2010
UPDATE table SET 
    [Email] = SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2)) 
WHERE 
    [Email] LIKE ‘”%”’
1 голос
/ 15 апреля 2010
UPDATE table
SET [Email] = SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2))
WHERE [Email] LIKE ‘”%”’

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

1 голос
/ 15 апреля 2010

Вы можете использовать оператор UPDATE, например:

update table 
set Email = SUBSTRING(Email, 2, PATINDEX('%,%', Email – 2)) 
WHERE Email LIKE '"%"'
1 голос
/ 15 апреля 2010
UPDATE table
SET Email = SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2))
WHERE [Email] LIKE ‘”%”’

Должен сделать свое дело. Конечно, сначала проверьте его на тестовых данных:)

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