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

Откуда:
Сообщений: 116
Было вот так и все работало:
UPDATE [test2].[dbo].[_REFERENCE32] SET [_Fld9339]  =Replace(Replace(Replace(REPLACE(REPLACE(REPLACE([_DESCRIPTION], ' ', ''), ')', ''), '(', ''), '-', ''), '.', ''), ',', '')
							+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([_Fld427], '-',''),' ',''),'_',''),'.',''),',','')
							+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([_Fld8515], '-',''),' ',''),'_',''),'.',''),',','')
Но понадобилось склеить еще одно поле из другой таблицы, причем если из выборки из второй таблицы вернется Null, то подставить один пробел. Добавил так:
UPDATE [test2].[dbo].[_REFERENCE32] SET [_Fld9339]  =Replace(Replace(Replace(REPLACE(REPLACE(REPLACE([_DESCRIPTION], ' ', ''), ')', ''), '(', ''), '-', ''), '.', ''), ',', '')
							+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([_Fld427], '-',''),' ',''),'_',''),'.',''),',','')
							+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([_Fld8515], '-',''),' ',''),'_',''),'.',''),',','')
							+REPLACE(
							IIF((SELECT [_Reference30].[_Description] FROM [_Reference30] WHERE [_Reference30].[_IDRRef]=[_Reference32].[_Fld6610_RRRef]) IS NULL, ' ', (SELECT [_Reference30].[_Description] FROM [_Reference30] WHERE [_Reference30].[_IDRRef]=[_Reference32].[_Fld6610_RRRef])) 
							 ,' ','')

Синтаксис как будто правильный, но вылезли следующие ошибки:
Сообщение 156, уровень 15, состояние 1, процедура NameJoin, строка 14
Неправильный синтаксис около ключевого слова "IS".
Сообщение 102, уровень 15, состояние 1, процедура NameJoin, строка 14
Неправильный синтаксис около конструкции ")".
Конструкция IIF подчеркнута и при наведении пишет: "IIF не является распознанным именем встроенной функции".

Сообщение было отредактировано: 14 мар 13, 12:51
14 мар 13, 12:46    [14046985]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь с синтаксисом при использовании функций в функциях внутри update  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
okwell5
Конструкция IIF подчеркнута и при наведении пишет: "IIF не является распознанным именем встроенной функции".
Угу. Вы Аксесс с SQL Server перепутали.
14 мар 13, 12:49    [14047011]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь с синтаксисом при использовании функций в функциях внутри update  [new]
Гость333
Member

Откуда:
Сообщений: 3683
okwell5
Конструкция IIF подчеркнута и при наведении пишет: "IIF не является распознанным именем встроенной функции".

Является, начиная с SQL Server 2012.
Используйте CASE.
14 мар 13, 12:52    [14047046]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь с синтаксисом при использовании функций в функциях внутри update  [new]
okwell5
Member

Откуда:
Сообщений: 116
Гость333,
UPDATE [test2].[dbo].[_REFERENCE32] SET [_Fld9339]  =Replace(Replace(Replace(REPLACE(REPLACE(REPLACE([_DESCRIPTION], ' ', ''), ')', ''), '(', ''), '-', ''), '.', ''), ',', '')
							+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([_Fld427], '-',''),' ',''),'_',''),'.',''),',','')
							+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([_Fld8515], '-',''),' ',''),'_',''),'.',''),',','')
							+REPLACE(	CASE (SELECT [_Reference30].[_Description] FROM [_Reference30] WHERE [_Reference30].[_IDRRef]=[_Reference32].[_Fld6610_RRRef])
											WHEN NULL THEN '.'
											WHEN '' THEN '.'
											ELSE (SELECT [_Reference30].[_Description] FROM [_Reference30] WHERE [_Reference30].[_IDRRef]=[_Reference32].[_Fld6610_RRRef])
										END 
							 ,' ','')   

Все равно в поле [_Fld9339] нуллы во многих строках. Вместо пробелов уже вставил точки, предполагая, что функция Replace отрезает пробел и возвращает NULL, но даже это не помогло.
14 мар 13, 13:19    [14047249]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь с синтаксисом при использовании функций в функциях внутри update  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ISNULL(NULLIF([field] , ''),'') 


не проще велисопеда вашего то ?
14 мар 13, 13:23    [14047299]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь с синтаксисом при использовании функций в функциях внутри update  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Field WHEN NULL - это всё равно что Field=NULL
Так сравнивать с NULL нельзя. Только IS NULL
Зачем там коррелированные подзапросы?
Лучше переделать на LEFT JOIN
14 мар 13, 13:25    [14047317]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь с синтаксисом при использовании функций в функциях внутри update  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
За IIF не знал, совсем им там заняться нечем было, по ходу.

Мне вот интересно, могут ли подзапросы из [_Reference30] вернуть больше одной строки. И если не одной не вернут, тоже интересно.
14 мар 13, 13:31    [14047367]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь с синтаксисом при использовании функций в функциях внутри update  [new]
okwell5
Member

Откуда:
Сообщений: 116
Получилось. Код изменил на следующий:
UPDATE [test2].[dbo].[_REFERENCE32] SET [_Fld9339]  =Replace(Replace(Replace(REPLACE(REPLACE(REPLACE([_DESCRIPTION], ' ', ''), ')', ''), '(', ''), '-', ''), '.', ''), ',', '')
							+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([_Fld427], '-',''),' ',''),'_',''),'.',''),',','')
							+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([_Fld8515], '-',''),' ',''),'_',''),'.',''),',','')
							+REPLACE(ISNULL(NULLIF((SELECT [_Reference30].[_Description] FROM [_Reference30] WHERE [_Reference30].[_IDRRef]=[_Reference32].[_Fld6610_RRRef]) , ''),'')											
							 ,' ','') 

Спасибо всем откликнувшимся!
14 мар 13, 13:42    [14047440]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить