Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли изменить содержание многих скриптов в базе данных?  [new]
kombala
Member

Откуда:
Сообщений: 41
Есть таблица, в которой хранятся скрипты для вывода отчетов в FastReport и в них для вывода возраста используется "datediff(dd,birthdate,getdate())/365.25". В связи с этим у некоторых людей возраст рассчитывается неточно.
Эти скрипты хранятся в таблице в обычном varchar(max) формате, и их там под 300 штук. Можно ли проапдейтить все имеющиеся скрипты, заменив там эту строчку, на например такую:
"(datediff(year, birthdate, getdate()) -
case
when month(birthdate) < month(getdate())
then 0
when month(birthdate) > month(getdate())
then 1
when day(birthdate) > day(getdate())
then 1
else 0
end)"
Такой функцией возраст рассчитывается точно, день в день.
11 окт 17, 17:44    [20861793]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
kombala
Member

Откуда:
Сообщений: 41
Просто вручную все скрипты менять уж очень много времени потребует.
11 окт 17, 17:49    [20861814]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
kombala
Можно ли проапдейтить все имеющиеся скрипты
Вопрос в чём, можно ли сделать апдэйт поля типа строка в таблице? Да, можно. REPLACE.
11 окт 17, 17:53    [20861828]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
Для типов text, varchar(max) есть UPDATETEXT и UPDATE column.writetext соответственно. Читайте справку об этих типах.
11 окт 17, 18:44    [20861977]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
invm
Member

Откуда: Москва
Сообщений: 9345
Владислав Колосов
Для типов text, varchar(max) есть UPDATETEXT и UPDATE column.writetext соответственно
https://docs.microsoft.com/en-us/sql/t-sql/queries/writetext-transact-sql
Permits minimally logged, interactive updating of an existing text, ntext, or image column. WRITETEXT overwrites any existing data in the column it affects.
...
Use WRITETEXT to replace text, ntext, and image data and UPDATETEXT to modify text, ntext, and image data. UPDATETEXT is more flexible because it changes only a part of a text, ntext, or image column instead of the whole column.
11 окт 17, 19:07    [20862008]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Владислав Колосов
Для типов text, varchar(max) есть UPDATETEXT и UPDATE column.writetext соответственно. Читайте справку об этих типах.
kombala
Эти скрипты хранятся в таблице в обычном varchar(max) формате
11 окт 17, 19:45    [20862068]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
kombala
Member

Откуда:
Сообщений: 41
alexeyvg,

Ну конечно, update replace, спасибо большое, сам не додумался что так можно сделать, replace всего пару раз использовал в селекте.
12 окт 17, 09:29    [20862784]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
по сабжу: Можно попробовать заменить SQL-функцией.
12 окт 17, 09:52    [20862837]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
iap
Владислав Колосов
Для типов text, varchar(max) есть UPDATETEXT и UPDATE column.writetext соответственно. Читайте справку об этих типах.
kombala
Эти скрипты хранятся в таблице в обычном varchar(max) формате


Вы только половину прочли из того, что я написал.
12 окт 17, 12:50    [20863788]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
o-o
Guest
Владислав Колосов
iap
пропущено...
пропущено...


Вы только половину прочли из того, что я написал.

он даже процитировал полностью.
приведены архаичные методы работы с архаичными же типами,
+ призыв прочесть справку о них.
хотя может там еще что-то невидимыми чернилами написано, конечно
12 окт 17, 13:00    [20863829]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
o-o,

Вы тоже не дочитали.

varchar(max)
UPDATE column.writetext

UPDATE (Transact-SQL)
column_name { .WRITE ( expression , @Offset , @Length )
Для частичного или полного обновления типов данных varchar(max), nvarchar(max) и varbinary(max) используется предложение .WRITE (expression , @Offset , @Length).
12 окт 17, 18:37    [20865377]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Владислав Колосов
Вы тоже не дочитали.
Вы уже несколько раз намекнули, скажите прямо, а то вроде никто не может понять (я точно).
Зачем ТС нужен WRITE?
12 окт 17, 21:00    [20865648]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
alexeyvg,

минимальное протоколирование для большого массива данных? Автор путь сам решает.
13 окт 17, 10:26    [20866440]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли изменить содержание многих скриптов в базе данных?  [new]
kombala
Member

Откуда:
Сообщений: 41
alexeyvg,

Мне write не нужен, мне вполне хватило:

update slreport set script = replace(script,'(datediff(dd,birthdate,getdate())/365)','%(datediff(year, birthdate, getdate()) -
case
when month(birthdate) < month(getdate())
then 0
when month(birthdate) > month(getdate())
then 1
when day(birthdate) > day(getdate())
then 1
else 0
end)%') from slreport


Спасибо вам за подсказку сделать это обычным replace.
13 окт 17, 10:36    [20866499]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить