el_tot93 Ответов: 2

Обновление или вставка представления или функции не удалось, поскольку они содержат производное или постоянное поле.


я использую этот код для сбора имени


SELECT        ISNULL(Col2, '') + ' ' + ISNULL(Col3, '') + ' ' + ISNULL(Col4, '') + ' ' + ISNULL(Col5, '') + ' ' + ISNULL(Col6, '') + ' ' + ISNULL(Col7, '') + ' ' + ISNULL(Col8, '') + ' ' + ISNULL(Col9, '') + ' ' + ISNULL(Col10, '') AS Fullname
FROM            dbo.tabl


Что я уже пробовал:

и я стараюсь, чтобы удалить пространство формы, предусмотренные настоящим Кодексом
но это не сработало с представлениями так что же мне делать
GO

UPDATE tabl SET Fullname= LTRIM(Fullname)
GO

0x01AA

Не уверен, что это так LTRIM это действительно то, что вам нужно... В любом случае Fullname кажется, что это не столбец таблицы tabl (это псевдоним fieldname для вашей конкатенации), и поэтому нет никаких шансов обновить его ;)

Может быть, это то, что вам нравится делать?
SELECT LTRIM( ISNULL(Col2, '') + ' ' + ISNULL(Col3, '') + ' ' + ISNULL(Col4, '') + ' ' + ISNULL(Col5, '') + ' ' + ISNULL(Col6, '') + ' ' + ISNULL(Col7, '') + ' ' + ISNULL(Col8, '') + ' ' + ISNULL(Col9, '') + ' ' + ISNULL(Col10, '')) AS Fullname
FROM dbo.tabl

el_tot93

ТО, ЧТО Я ИЩУ СПАСИБО

2 Ответов

Рейтинг:
20

0x01AA

Хорошо, тогда, похоже, вы действительно ищете это:

SELECT LTRIM( 
   ISNULL(Col2, '') + ' ' + ISNULL(Col3, '') + ' ' + ISNULL(Col4, '') + ' ' + 
   ISNULL(Col5, '') + ' ' + ISNULL(Col6, '') + ' ' + ISNULL(Col7, '') + ' ' + 
   ISNULL(Col8, '') + ' ' + ISNULL(Col9, '') + ' ' + ISNULL(Col10, '')
   ) AS Fullname
 FROM dbo.tabl


Рейтинг:
2

Wendelius

Просто чтобы дать вам альтернативу. Если полное имя используется в нескольких запросах, было бы неплохо определить его как вычисляемый столбец в базе данных. Иначе говоря

ALTER TABLE dbo.tabl
  ADD FullName AS RTRIM( LTRIM( 
   ISNULL(Col2, '') + ' ' + ISNULL(Col3, '') + ' ' + ISNULL(Col4, '') + ' ' + 
   ISNULL(Col5, '') + ' ' + ISNULL(Col6, '') + ' ' + ISNULL(Col7, '') + ' ' + 
   ISNULL(Col8, '') + ' ' + ISNULL(Col9, '') + ' ' + ISNULL(Col10, '')
   ));

После этого вы можете использовать столбец FullName в своих запросах, не повторяя формулу везде:
SELECT FullName FROM dbo.tabl;



В качестве дополнительного замечания я бы предложил использовать осмысленные имена для столбцов вместо col1, col2, ... Позже, когда вы возвращаетесь к коду, трудно вспомнить, какая колонка была какой. Если это часть имен возможно что то вроде NamePart1, NamePart2, ...


0x01AA

Очень хорошая альтернатива и комментарии, а 5

Wendelius

Спасибо!