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

function GetRequestParam(param)
{
	var res = null;
	try{
		var qs = decodeURIComponent(window.location.search.substring(1));//get everything after then '?' in URI
		var ar = qs.split('&');
		$.each(ar, function(a, b){
			var kv = b.split('=');
			if(param === kv[0]){
				res = kv[1];
				return false;//break loop
			}
		});
	}catch(e){}
	return res;
}

10
задан ConcernedOfTunbridgeWells 8 October 2008 в 22:41
поделиться

6 ответов

Решение:

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

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

26
ответ дан 3 December 2019 в 14:12
поделиться

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

При попытке его на поле CHAR без функции RTRIM, Вы получите "Строку, или двоичные данные были бы усеченной" ошибкой.

5
ответ дан 3 December 2019 в 14:12
поделиться

Если исходные данные прибыли из символьного столбца или переменной (перед тем, чтобы быть вставленным в эту таблицу), то исходным данным добавили пробелы прежде, чем стать 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
ответ дан 3 December 2019 в 14:12
поделиться

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

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

Править: Ох +1 к ответу @MattMitchell для rtrim предложения.

2
ответ дан 3 December 2019 в 14:12
поделиться

Я хотел скорректировать Жизненный Урок "B David". Я думаю, что это должен быть "никогда символ использования для значений строки переменной длины"-> существует допустимое использование для типа данных char, просто не думают, целых некоторые люди :)

1
ответ дан 3 December 2019 в 14:12
поделиться

Ответ на тайну конечных пробелов может быть найден в ANSI_PADDING

Для получения дополнительной информации посещение: НАБОР ANSI_PADDING (Transact-SQL)

Значение по умолчанию является ANSI_PADDIN НА. Это будет влиять на столбец только, когда он будет создан, но не к существующим столбцам.

Прежде чем Вы выполните запрос на обновление, проверите Ваши данные. Это, возможно, было поставлено под угрозу.

Выполните следующий запрос для нахождения поставленных под угрозу строк:

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
ответ дан 3 December 2019 в 14:12
поделиться