Как объявить переменную в T-SQL и использовать ее в инструкции update

#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. Спасибо за ваш ответ, но я предпочитаю ответ Дэмиена