Как проще всего использовать T-SQL / MS-SQL для добавления строки в существующие ячейки таблицы?

У меня есть таблица с колонкой «имя файла». Я недавно выполнил вставку в этот столбец, но в спешке забыл добавить расширение файла ко всем введенным именам файлов. К счастью, все они - изображения «.jpg».

Как я могу легко обновить столбец «имя файла» этих вставленных полей (при условии, что я могу выбрать последние строки на основе известных значений идентификаторов), чтобы включить расширение «.jpg»?

20.08.2008 08:52:00
6 ОТВЕТОВ
РЕШЕНИЕ

Решение:

UPDATE tablename SET [filename] = RTRIM([filename]) + '.jpg' WHERE id > 50

RTRIM необходим, потому что в противном случае для конкатенации строк будет выбран столбец [имя_файла] полностью, т. Е. Если это столбец varchar (20), а имя файла имеет длину всего 10 букв, он все равно выберет эти 10 букв, а затем 10 пробелов. Это, в свою очередь, приведет к ошибке при попытке вставить 20 + 3 символа в поле длиной 20 символов.

27
20.08.2008 08:54:43
Есть вар символьные включают значения пробелов в выражениях или просто фиксированная длиной полукокс поле?
Mark Cidade 20.08.2008 11:25:51
Я не уверен - поле, с которым я работал, было var char (50), и оно включало интервалы, которые, я согласен, противоречат идее varchar. Возможно, кто-то может просветить нас, почему при выборе varchar были выбраны пробелы?
Matt Mitchell 21.08.2008 00:16:26
Если ваш столбец содержит данные в виде поля char (50) и заменен на varchar (50), дополнительные пробелы будут перенесены.
Nielsvh 15.11.2016 23:24:20

Хороший легкий, я думаю.

update MyTable
set filename = filename + '.jpg'
where ...

Отредактируйте: Ooh +1 к ответу @ MattMitchell за предложение rtrim.

3
22.07.2012 12:58:42

Ответ MattMitchell верен, если столбец является CHAR (20), но не верен, если это был VARCHAR (20) и пробелы не были явно введены.

Если вы попробуете это в поле CHAR без функции RTRIM, вы получите ошибку «Строка или двоичные данные будут обрезаны» .

5
22.07.2012 12:58:32
Я не уверен - поле, с которым я работал, было var char (50), и оно включало интервалы, которые, я согласен, противоречат идее varchar. Возможно, кто-то может просветить нас, почему при выборе varchar были выбраны пробелы?
Matt Mitchell 21.08.2008 00:16:26

Если исходные данные были получены из столбца или переменной типа char (до вставки в эту таблицу), то к исходным данным добавлялись пробелы, прежде чем они стали varchar.

DECLARE @Name char(10), @Name2 varchar(10)
SELECT
  @Name = 'Bob',
  @Name2 = 'Bob'

SELECT
  CASE WHEN @Name2 = @Name THEN 1 ELSE 0 END as Equal,
  CASE WHEN @Name2 like @Name THEN 1 ELSE 0 END as Similiar

Урок жизни: никогда не используйте чар.

1
16.09.2008 21:54:39
AH! Это был импорт в Excel с использованием инструмента импорта SQL
Matt Mitchell 27.02.2009 13:17:18

Ответ на загадку замыкающих пробелов можно найти в ANSI_PADDING

Для получения дополнительной информации посетите: SET ANSI_PADDING (Transact-SQL)

По умолчанию установлено значение ANSI_PADDIN ON. Это повлияет на столбец только при его создании, но не на существующие столбцы.

Перед выполнением запроса на обновление проверьте свои данные. Это могло быть скомпрометировано.

Выполните следующий запрос, чтобы найти скомпрометированные строки:

SELECT *
FROM tablename 
WHERE LEN(RTRIM([filename])) > 46 
-- The column size varchar(50) minus 4 chars 
-- for the needed file extension '.jpg' is 46.

Эти строки либо потеряли несколько символов, либо недостаточно места для добавления расширения файла.

1
2.10.2008 01:08:29

Я хотел изменить «Урок жизни» Дэвида Б. Я думаю, что это должно быть «никогда не использовать char для строковых значений переменной длины» -> Есть допустимые варианты использования для типа данных char, но не так много, как думают некоторые люди :)

1
17.09.2008 04:56:51