Как добавить строку в конце данного столбца в SQL Server? - PullRequest
7 голосов
/ 16 марта 2009

У меня есть проект, над которым я работаю. на основе резервной базы данных SQl Server с рабочего сервера. У них более 16 000 адресов электронной почты пользователей, и я хочу их испортить, чтобы система (которая имеет автоматические почтовые программы) не отправляла электронные письма на действительные адреса.

Но я все еще хочу пользователей, и я хочу, чтобы они могли полностью изменить то, что я делаю (именно поэтому я не хочу их удалять).

SQL я пытаюсь:

ОБНОВЛЕНИЕ Контактов SET
EmailAddress = EmailAddress + '.x'

Но это не работает, что я делаю не так?

Сообщение об ошибке выглядит следующим образом:

---------------------------
Microsoft SQL Server Management Studio Express
---------------------------
SQL Execution Error.

Executed SQL statement: UPDATE Contact SET EmailAddress = EmailAddress + '.x'
Error Source: .Net SqlClient Data Provider
Error Message: String or binary data would be truncated. The statement has been terminated.
---------------------------
OK   Help   
---------------------------

Ответы [ 6 ]

7 голосов
/ 16 марта 2009

Проблема в том, что EmailAddress +".x" приводит к тому, что некоторые ваши данные слишком длинные для данного поля. Вы могли бы сделать:

select * from Contact where len(EmailAddress +".x") > LENFIELD

Заменить LENFIELD длиной столбца, определенной в таблице. Если вы просто хотите скопировать данные, почему бы просто не установить все поля на один адрес электронной почты? Или измените строки, которые вызывают ошибку, чтобы они были короче.

6 голосов
/ 16 марта 2009

Можете ли вы быть более точным в отношении любых ошибок, которые вы получаете? Я только что привел пример, и он отлично работает.

Редактировать - поля EmailAddress, которые вы пытаетесь обновить, уже близки к полному размеру поля, чтобы убедиться, что редактирование применяется ко всем необходимым записям, вам нужно изменить добавить 2 к размеру столбца для этого поля

BTW Sql, чтобы преобразовать его обратно

update Contact 
set EmailAddress = SUBSTRING(EmailAddress , 0 , len(EmailAddress ) - 1)
where SUBSTRING(EmailAddress , len(EmailAddress ) - 1, 2) = '.x'
3 голосов
/ 16 марта 2009

Это полные адреса электронной почты, с @domain.name? В этом случае вы можете использовать UPDATE ... SELECT REPLACE, чтобы изменить @, скажем, на *.

1 голос
/ 16 марта 2009

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

0 голосов
/ 16 марта 2009

Первый результат поиска в Google с сообщением об ошибке гласит:

«Строка или двоичные данные будут обрезаны» MS Sql error

Эта проблема возникает при попытке вставить в поле строку, длина которой превышает длину. Единственное решение, которое я смог найти, это установить большую длину поля.

Ссылка: http://www.dotnetjunkies.com/WebLog/skiff/archive/2005/01/31/49336.aspx

0 голосов
/ 16 марта 2009

попробовать:

ОБНОВЛЕНИЕ Контакта SET EmailAddress = EmailAddress || '.X';

|| является оператором конкатенации строк (varchar) в SQL.

СОВЕТ: Сообщения об ошибках помогут, если задать больше вопросов.

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