#sql-server-2008
#sql-server-2008
Вопрос:
Новичок в SQL scripting, пытаюсь обновить часть строки в SQL script, используя define variable, как показано ниже, но не могу заставить ее работать. Столбец может быть таким \OM-WD08-1TestDocreportrep.pdf
существует множество таблиц с разными заголовками столбцов для обновления. Я хочу объявить переменную и заменить там, где это применимо. заранее спасибо
USE MyServer
-- Declare the variable to be used.
DECLARE @OldPath varchar(30), @NewPath varchar(30)
-- Initialize the variable
SET @OldPath ='\OM-WD08-1';
SET @NewPath ='\AA-PC';
UPDATE AnatomyConfigs
SET Path = REPLACE(Path, @OldPath, @NewPath)
WHERE Path IS NOT NULL
AND Path LIKE @OldPath
GO
Комментарии:
1.
Path LIKE @OldPath
никогда не будет иметь значения true, еслиPath
равно null, поэтому ваша первая проверка избыточна.
Ответ №1:
LIKE
выполняется только буквальное сопоставление текста, если вы не включаете какую-либо форму подстановочных знаков ( %
или _
). Я бы сделал это:
USE MyServer
-- Declare the variable to be used.
DECLARE @OldPath varchar(30), @NewPath varchar(30)
-- Initialize the variable
SET @OldPath ='\OM-WD08-1';
SET @NewPath ='\AA-PC';
UPDATE AnatomyConfigs
SET Path = @NewPath SUBSTRING(Path,LEN(@OldPath) 1,8000)
WHERE Path LIKE @OldPath '%'
GO
Я предпочитаю использовать SUBSTRING
over REPLACE
, потому что это более четко отражает «Я просто хочу заменить экземпляр, который встречается в начале строки». Теперь, учитывая, что ни один путь не должен содержать \
s в середине, в данном конкретном случае это на самом деле не требуется, но я собираюсь дать более общий ответ.
Комментарии:
1. Спасибо, Дэмиен, ваше решение сработало. сэкономьте мне много времени на поиск. Я ценю вашу помощь
Ответ №2:
Declare @varibale_name varhcar(50)
To set Value:
set @variable_name='dgnughg'
update Table_Name set column_name=@variable_name
Комментарии:
1. Спасибо за ваш ответ, но я предпочитаю ответ Дэмиена